【操作】使用 nonlocal 声明外层局部变量
# 测试nonlocal ,glabal 的 关键字 用法 a = 100 def outer(): b = 10 def inner(): nonlocal b # 需要nonlocal 来声明外部函数 (outer) 的局部变量 print('inner read outer var b:', b) # inner 读取函数 outer 的变量 可以的 ,但是修改 就不行了 b = 20 # 不用nonlocal 声明的话 这行代码 会报错 global a # 声明 全局变量 a = 1000 inner() # 这里调用了 inner 所以 第二个 print 打印出来 是'20' print('inner:', b) outer() print('a:', a)执行效果
In [8]: a = 100 ...: ...: ...: def outer(): ...: b = 10 ...: ...: def inner(): ...: nonlocal b # 需要nonlocal 来声明外部函数 (outer) 的局部变量 ...: print('inner read outer var b:', b) # inner 读取函数 outer 的变量 可以的 ,但是修改 就不行了 ...: b = 20 # 不用nonlocal 声明的话 这行代码 会报错 ...: ...: global a # 声明 全局变量 ...: a = 1000 ...: inner() # 这里调用了 inner 所以 第二个 print 打印出来 是'20' ...: print('inner:', b) ...: In [9]: outer() inner read outer var b: 10 inner: 20 In [10]: print('a:', a) a: 1000