这是我的例子
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?
答案 0 :(得分:4)
在angular.json
中,当您声明i3()
时,它的确使用了最外面的global x
,但您没有更改其值。
在代码的这一部分:
x
i3()
print("outer:", x)
命令不在print
方法之外,因此不正在使用全局i3()
。将使用本地x
。 x
中的global
命令意味着仅i3()
中使用的x
是全局的。在i3()
之外,i3()
的声明global
范围将结束。
因此,x
显示3,这是print("outer:", x)
方法的局部变量值。最外面的outer()
始终为0。
答案 1 :(得分:1)
我认为您的测试用例存在错误。如果我将i3
更改为:
def i3():
global x
x = "i3"
print("inner3:", x)
然后我得到
global: i3
最后,正如我所期望的那样。