回答
在你表達function([1, 2, 3, 4])(10)
有兩種calls,一個帶參數[1, 2, 3, 4]
和其他與參數10
。爲此,function
必須是可調用的,返回可調用的。 Python很大程度上依賴於具有定義其行爲的類型的對象,並且可調用性是這些行爲之一,通過具有__call__
方法(這是可調用類型)的對象遞歸定義。由於這種動態行爲,我們無法從表達式中看出function
是什麼類型。
儘管如此,我們可以提供使表達式有效的示例。例如:
function = lambda x: x.__contains__
這將使用lambda表達式創建一個匿名函數,該函數是可調用的。該函數返回一個綁定方法(假設它的參數具有__contains__
方法),該方法又可以調用,並且表達式將計算爲False
。
class function:
def __init__(self,a):
"Method called during object initialization"
# Note that the return value doesn't come from this method.
# self is created before it is called and returned after.
def __call__(self,b):
"Method called when the object is called"
return "Well, the first one wasn't quite a function."
這使名爲function
類和類是可調用的,這是我們如何實例化它們。所以第一次調用變成了對象實例化,第二次調用調用了一個對象。在這個例子中,我們實際上並沒有函數,但我們確實有兩個方法在兩個調用中被調用。
AChampion的示例使用了兩個正常的函數定義,其中一個發生在另一個函數內,在該調用的a
值上創建閉包。這是一個比較傳統的方法,雖然我們可以使用可變值還是懵懵懂懂的水域:
def function(a):
def inner(b):
return sum(a) == b
return inner
>>> l = [1,2,3,4]
>>> eq = function(l)
>>> eq(10)
True
>>> eq(15)
False
>>> l.append(5)
>>> eq(15)
True
>>> eq(10)
False
我們在這裏看到,這是不是在數學意義上的純函數,它的值由比其他國家的影響其論據。我們經常嘗試避免這種副作用,或者至少通過突出顯示狀態容器來暴露它們,例如在方法調用中。
最後,這取決於上下文中,表達可以通過多種方式實現,包括NameError
如果function
根本沒有被定義,或者如果TypeError
其中一個呼叫嘗試的非可調用對象上失敗。它仍然是句法正確的Python,並且這兩個例外都可以處理,儘管這樣做可能有點顛倒。一個例子可能是一個電子表格程序,其中單元格公式是Python表達式;你會用特定的命名空間(全局變量)evaluate,並捕獲任何錯誤來解釋輸入錯誤的公式。
我假設基於你在你的問題提供的信息有限了很多。
但它看起來像你試圖瞭解功能封閉。這裏是一個完全人爲的例子:
def function(a):
def inner(b):
return sum(a) == b
return inner
>>> function([1,2,3,4])(10)
True
>>> eq = function([1,2,3,4])
>>> eq(10)
True
>>> eq(11)
False
- 1. 有人可以解釋這些javascript的概念嗎?
- 2. 有人可以解釋'&'在這種情況下的工作原理嗎?
- 3. 有人可以在混淆中解釋DashO概念嗎?
- 4. 在這種情況下可以從庫擴展功能嗎?
- 5. 有沒有人可以向我解釋可插拔適配器的概念嗎?
- 6. 有人可以解釋這個.htaccess RewriteRule的功能嗎?
- 7. 有人可以給我一個這個功能的解釋嗎?
- 8. python元組,有人可以解釋這種行爲嗎?
- 9. 在這種情況下,有人可以解釋「參考」和「指針」之間的區別嗎?
- 10. 有人可以向我解釋這個功能嗎?
- 11. 有人可以解釋這些JavaScript cookie功能嗎?
- 12. 任何人都可以解釋這個python靜態類變量的情況嗎?
- 13. 有人可以解釋AlarmManeger的這種奇怪的行爲嗎?
- 14. 有人可以解釋一下這段Python代碼嗎?
- 15. 有人可以解釋System.nanoTime()的這種描述嗎?
- 16. 有人可以解釋我這種多態性的輸出嗎?
- 17. 有人可以解釋這種奇怪的toString行爲嗎?
- 18. 有人可以解釋這種遞歸的工作原理嗎?
- 19. cin是在這種情況下使用的正確功能嗎?
- 20. 有人可以在javascript中解釋這種行爲嗎?
- 21. 有人可以在C#中解釋這種語法嗎?
- 22. 這怎麼可能?有人可以解釋這個嗎?
- 23. 在這種情況下,我有可能提到鑰匙嗎?
- 24. 我可以在沒有Python解釋器的情況下構建LLVM嗎?
- 25. 有人可以解釋這一點嗎?
- 26. 有人可以解釋這個宏嗎?
- 27. 你能解釋一下Service-builder的概念嗎?
- 28. 你能解釋一下RESTful的Web概念嗎?
- 29. 有人可以解釋一下嗎?
- 30. 在這種簡單的情況下可能發生死鎖嗎?
這不是訪問第10個元素。 'function'函數返回一個函數,然後用單個參數'10'調用函數。 –
'function'究竟是什麼? –