最近在 Python 中我想到了一些东西:x = y(z)
相当于x = y.__call__(z)
. 但是,测试似乎使该假设无效,并且还导致 Python 的解释器崩溃。
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 函数及其__call__
属性