Python 为什么Z没有结束
1.)为什么不生成闭包(例如1) 例如,有一个闭包 2.)示例1即使Z没有闭包,我如何能够从外部函数中获取Z的值(因为一旦本地函数作用域覆盖了所有对象,就会根据闭包进行垃圾收集或保留) 示例1Python 为什么Z没有结束,python,python-2.7,Python,Python 2.7,1.)为什么不生成闭包(例如1) 例如,有一个闭包 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 0x0000000004
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>)
但当我这么做的时候
示例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>
def outer():
x=3
y=4
z=0
def inner():
返回x,y,z
返回内部
i=外部()
i、 _uuu闭包__
出[72]:
(,
,
为什么在示例1中没有生成闭包,而在示例2中有闭包
因为内部函数不需要外部函数的z
即使Z没有闭包,我怎样才能从Z的外部函数中得到值呢
不能。您得到的z
是您传递的参数,而不是外部函数的z
(这就是为什么它是2而不是0。)
为什么在示例1中没有生成闭包,而在示例2中有闭包
因为内部函数不需要外部函数的z
即使Z没有闭包,我怎样才能从Z的外部函数中得到值呢
不能。您得到的
z
是您传递的参数,而不是外部函数的z
(这就是为什么它是2而不是0。)在示例1中,您使用同名参数对非本地的z
进行了阴影处理。将您的参数调用到internal
一些不会对z
进行阴影处理的对象,如w
。在这种情况下,您希望第三个输出参数是z
还是w
。无论哪种方式,它都将按编码方式工作。不确定是什么at正在绊倒您。函数参数也是局部变量;zdef-inner(z)中的z
:
是一个局部变量,而不是闭包或全局变量。在示例1中,您使用同名参数对非局部的z
进行了阴影处理。将您的参数调用到内部一些不阴影z
,例如w
。在这种情况下,您希望第三个输出参数是z
还是w
通过这种方式,它将按编码方式工作。不确定是什么让您感到困惑。函数参数也是局部参数;z
中的def inner(z):
是局部参数,而不是闭包或全局参数。
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>