2017-07-02 31 views
1

我解決了幾個問題,在python 在其中的一個應用到一個值(VAR2)的符號,它要求我寫一個函數,這樣當 examplefunction([1, 2, 3, 4])(10)返回有些東西只是說10如何函數使用(VAR1)在python

麻煩的是,我從來沒有看到使用雙重()()到目前爲止在python中調用函數的符號。

我試過在堆棧溢出如 Python: Apply function to values in nested dictionary

看着多個職位,但實在是沒有問題是這樣的。

+0

你的問題太模糊在具體的方式來回答。簡單的答案是你需要'examplefunction'來返回一個函數。不要認爲它是「double()()」。它是一個()返回一個值。該值是一個函數,然後用second()調用。 – BrenBarn

+0

'()()'不會調用* a *函數。 – chepner

+0

@chepner我會說這可能。如果函數返回自身,那麼調用* a *函數(兩次)。 –

回答

7

object()()只是_result = object()_result()鏈接。只要第一個調用返回一個可調用對象,第二個調用表達式就可以繼續。

你的examplefunction()調用返回另一個函數。函數是對象,所以你可以只返回一個現有的功能:

def examplefunction(): 
    return secondfunction 

def secondfunction(): 
    return 10 

此時examplefunction()()產生10

你也可以有你的examplefunction()通話產生每一次新的函數對象,通過定義一個函數對象作爲其身體的一部分:

def examplefunction(): 
    def nestedfunction(): 
     return 10 
    return nestedfunction 

這給了相同的結果,但額外的好處,nestedfunction()有(讀取)訪問examplefunction(這些被稱爲關閉)中定義的所有本地名稱;這使您可以進行參數如何nestedfunction()的行爲:

def examplefunction(base): 
    def nestedfunction(): 
     return base * 2 
    return nestedfunction 

examplefunction(5)() # produces 10 

我懷疑你的任務是試圖教你這些原則。

2

函數沒有多個參數括號。這些只是指嵌套函數或者包含其他函數的函數。

例如:

def func(a): 
    def func2(b): 
     return a + b 
    return func2 

將被調用是這樣的:

func(1)(2) 

(和將返回3作爲一個答案)

所以它似乎有兩個參數括號,但他們真的是兩種不同的功能!

希望它有幫助!

Source

1

如果你看到(...)(...)這意味着函數調用鏈和第一函數返回另一個函數。

例子:

def fn1(val1): 
    def fn2(val2): 
     print("{} {}".format(val1, val2)) 
    return fn2 

fn1("Hello")("World") # -> "Hello World" 

# you can also write this as: 
var1 = fn1("Hello") 
var1("World") 
相關問題