最近在Python中出現了一些東西:x = y(z)
相當於x = y.__call__(z)
。然而,一個測試似乎使這個假設無效,並導致Python的解釋器崩潰。執行`func = func .__ call__`時會發生什麼?
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> def ret(*args):
... return args
...
>>> ret(1, 2, 3)
(1, 2, 3)
>>> for _ in range(1000000):
... ret = ret.__call__
...
>>> ret(1, 2, 3)
運行第二ret(1, 2, 3)
導致Python的崩潰並返回到命令提示符(image)。
- 行
ret = ret.__call__
執行後會發生什麼情況? - 爲什麼Python在最後一行停止工作,並且應該將其報告爲錯誤?
無用參考:Python functions and their __call__
attribute
我不能在2.7或3.2.3中重現它。 – senderle
也不對3.3.0。您是否錯誤地輸入了 –
?可能是你的意思是'ret = ret .__ call __(_)' – akaRem