谈谈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。