为什么允许在块后使用对象?

sha*_*ane 0 python

在这段代码,为什么ab没有得到他们的各块的两端被破坏?

flag = True
if flag:
    a = 1

for i in range(2):
    b = 2

print(a, b)
Run Code Online (Sandbox Code Playgroud)

相反,此代码打印1 2.为什么Python允许这个?我什么时候可以依赖这种行为?

Pru*_*une 5

阅读Python的范围规则.简而言之,范围从一个新模块开始:函数,方法,类等.仅仅控制流语句(例如iffor)不会启动新范围.变量的范围是从其第一个定义到该范围的结尾.

由于此示例只有一个范围,因此每个变量从第一次分配到文件末尾都很好.

这足以解决问题吗?