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

时间:2017-04-26 21:46:19

标签: python

在此代码中,为什么ab不会在各自块的末尾被销毁?

flag = True
if flag:
    a = 1

for i in range(2):
    b = 2

print(a, b)

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

1 个答案:

答案 0 :(得分:5)

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

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

这足以解决问题吗?