0
我正在研究cs61a中的资料,但是“2.4.4本地状态”中的“撤回”示例给了我一个幻想,即使在调用完成后为了实现闭包,Python仍然维护函数环境。但看起来好像太昂贵了。那么python实现闭包的机制是什么?函数调用实现闭包后,Python是否维护函数环境?
我正在研究cs61a中的资料,但是“2.4.4本地状态”中的“撤回”示例给了我一个幻想,即使在调用完成后为了实现闭包,Python仍然维护函数环境。但看起来好像太昂贵了。那么python实现闭包的机制是什么?函数调用实现闭包后,Python是否维护函数环境?
当定义返回一个内部函数的外功能:
def outer():
x = 40
def inner():
return x + 2
return inner
可以访问外部函数的范围:
>>> func = outer()
>>> func()
42
为x
该值被存储在元组__closure__
:
>>> func.__closure__[0].cell_contents
40
谢谢,所以这是func的责任,维护环境而不是运行时。所以如果outer()不分配给任何对象,那么就没有必要维护环境。 – user4344026