1.)为什么没有生成闭包,例如1
例如2有关闭。
2.)示例1即使没有Z的闭包,我如何也可以从Z的外部函数获取值(因为一旦局部函数作用域覆盖了所有对象,则将基于闭包进行垃圾回收或保留)
例子1
def outer():
x=3
y=4
z=0
def inner(z):
return x,y,z
return inner
i=outer()
i.__closure__
Out[69]:
(<cell at 0x000000000451D738: int object at 0x0000000001D681A8>,
<cell at 0x000000000451D408: int object at 0x0000000001D68190>)
输出
i(2)
Out[78]: (3, 4, 2)
但是当我这样做
例子2
def outer():
x=3
y=4
z=0
def inner():
return x,y,z
return inner
i=outer()
i.__closure__
Out[72]:
(<cell at 0x000000000451D528: int object at 0x0000000001D681A8>,
<cell at 0x000000000451D3A8: int object at 0x0000000001D68190>,
<cell at 0x000000000451D9A8: int object at 0x0000000001D681F0>
最佳答案
为什么在例1中没有生成闭包,而在例2中有闭包。
因为内部函数不需要外部函数的z
。
即使没有Z的闭包,我如何能够从Z的外部函数中获取值
你不能您获得的z
是您传递的参数,而不是外部函数的z
。 (这就是为什么它是2而不是0的原因。)
关于python - 为什么Z没有关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45552671/