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
我懷疑你的任務是試圖教你這些原則。
你的問題太模糊在具體的方式來回答。簡單的答案是你需要'examplefunction'來返回一個函數。不要認爲它是「double()()」。它是一個()返回一個值。該值是一個函數,然後用second()調用。 – BrenBarn
'()()'不會調用* a *函數。 – chepner
@chepner我會說這可能。如果函數返回自身,那麼調用* a *函數(兩次)。 –