首页 > 解决方案 > Python 非本地和全局如何协同工作?

问题描述

这是我的例子

x=0
def outer():
    x = 1
    def i1():
        nonlocal x
        x = 2
        print("inner1:", x)

    i1()
    print("outer:", x)

    def i2():
        nonlocal x
        x = 3
        print("inner2:", x)

    i2()
    print("outer:", x)

    def i3():
        global x
        print("inner3:", x)

    i3()
    print("outer:", x)

outer()
print("global:", x)

我的 Jupyter 中的输出

inner1: 2
outer: 2
inner2: 3
outer: 3
inner3: 0
outer: 3
global: 0

为什么外部的值为0?

标签: pythonclosures

解决方案


i3()中,当你声明时global x,它确实使用了最外层x,但你没有改变它的值。

在这部分代码中:

i3()
print("outer:", x)

print命令在方法之外,因此i3()使用全局。这是将使用的本地。命令 in意味着只有使用的inside 才是全局的。一旦在外面,声明的范围将结束。xxglobali3()xi3()i3()globalx

因此,print("outer:", x)打印 3,这是outer()方法的局部变量的值。最外层x始终为 0。


推荐阅读