1.代码如下:
def a(): num = 10 print(num) def b(): #nonlocal num num = 3 print(num) b() print(num) a()
运行一下
10
3
10
目前是打印3 ,10 ,3,没问题,加上nonlocal后
def a(): num = 10 print(num) def b(): nonlocal num num = 3 print(num) b() print(num) a()
运行
10
3
3
打印出了10,3,3,此时nonlocal的作用是引用外层变量,b()函数中引用了外层变量是给外层的num赋值了3,所以后面打印的是3.nonlocal和golbal还是有比较大的区别,golcal是引用全局变量,而nonlocal是函数嵌套中引用外层变量。
num =100 def a(): num = 10 print(num) def b(): nonlocal num num = 3 print(num) b() print(num) a() print(num)
运行
10
3
3
100
nonlocal没有使最外层的num数值发生改变。