我还特地有到Python 3.0的环境中跑了一遍, 发现结果确实是3啊. 不懂就要问, 于是我开始搜寻各种资料, 发现这设计到了变量的作用域....动态作用域读取变量的结果, 其实与上方的回写变量的方式差不多, 不同的是, 动态作用域保留了全局变量原始的值....静态作用域
静态作用域也是通过变量的对照表来实现, 与动态作用域不同的是, 每个函数能看到的变量对照表只有自己的和全局的, 上面的函数调用, 换成静态作用域大概如下:
?...现象
了解了变量作用域相关内容, 也就能够解释最开始遇到的现象了.
再来回看一下最开始的问题, 为什么在Python 2.0中, 闭包读取到的变量是全局变量呢? 很明显, 其使用了静态作用域导致的....我是真的闲, 为了装Python2.0我就搞了半天, 查作用域又查了三四个小时.