谈谈 Python 中的 for 循环(2)

总忘记for语句的原理,属文记之

前置知识

作用域

Python 中的 for 循环并没有引入作用域(scope)的概念,但函数定义有引入作用域。

LEGB法则

python 中变量的搜索按照以下路径进行:

本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)

引用计数机制

Python 语言默认采用引用计数机制垃圾回收机制,当对象的引用计数为 0 时会被回收。默认创建的对象引用计数永不为 0

for循环变量在外部的状态

for x in range(10):
    print(x)

print(x)

看上去会抛出异常,然而事实上它运作正常。

我们用前置知识去解释它:

首先由于 for 没有作用域的概念,所以全局的 x 的会得到 for 循环中最后的值。

因为 x 为默认创建的对象(常量为解释器默认创建的对象),它当然不会被回收,所以的确存在。因此最终的 print(x)能够运作并打印出 10。