动态作用域读取变量的结果, 其实与上方的回写变量的方式差不多, 不同的是, 动态作用域保留了全局变量原始的值....既然原始值留下来了, 那自然就要能够读到, 否则留他何用, 读取的方式就是下面的静态作用域了....静态作用域
静态作用域也是通过变量的对照表来实现, 与动态作用域不同的是, 每个函数能看到的变量对照表只有自己的和全局的, 上面的函数调用, 换成静态作用域大概如下:
?...现象
了解了变量作用域相关内容, 也就能够解释最开始遇到的现象了.
再来回看一下最开始的问题, 为什么在Python 2.0中, 闭包读取到的变量是全局变量呢? 很明显, 其使用了静态作用域导致的....在 Python 中有两个关键字对变量进行声明:
global: 声明全局变量, 既通过静态作用域的方式查找变量
nolocal: 通过动态作用域的方式查找变量
当然, Python中通过上面关键字标识的变量修改