本帖最后由 jackz007 于 2024-12-14 22:46 编辑
使用 nonlocal x 声明的变量 x 应该是外层函数中的一个局部变量,在本例中, level2() 中被声明为 nonlocal 的变量 x 在其外层函数 level1() 中被声明为 global,既然 x 在 level1() 中已经被声明为 global 了,那么,在其内嵌函数 level2()、level3() 中就不可以将 x 声明为 nonlocal,而应该继续声明为 global,这样,无论在 level1()、level2() 还是 level3() 中修改 x 的值,修改的实际上是同一个对象 x。
x = 123
def level1():
global x
x = 456
print(f'在第一层函数中x的值是{x},相应的id值是{id(x)}')
def level2():
global x
x = 789
print(f'在第二层函数中x的值是{x},相应的id值是{id(x)}')
def level3():
global x
x = 101112
print(f'在第三层函数中x的值是{x},相应的id值是{id(x)}')
level3()
print(f'在第三层函数中声明 global 语句后,第二层x的值变为{x},相应的id值变为{id(x)}')
level2()
print(f'在第二层函数中声明 global 语句后,第二层x的值变为{x},相应的id值变为{id(x)}')
level1()
|