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