Python 为什么Z没有结束

Python 为什么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

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 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正在绊倒您。函数参数也是局部变量;
z
def-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>