2017-04-26 32 views
0

在这段代码中,为什么ab在各自块的末尾没有被破坏?为什么对象允许在一个块之后使用?

flag = True 
if flag: 
    a = 1 

for i in range(2): 
    b = 2 

print(a, b) 

相反,此代码打印1 2。为什么Python允许这样做?我何时可以依靠这种行为?

+0

因为Python没有块范围。 –

回答

5

阅读关于Python的范围规则。简而言之,保护范围开始使用一个新的模块:函数,方法,类,等等仅仅控制流语句(例如如果)不开始一个新的范围。变量的范围是从第一个定义到该范围的末尾。

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

这足以解决问题吗?

+1

请注意,一个变量甚至可以在其定义之前;这就是为什么像'def foo():print x;如果您的意图是在分配新值之前输出旧值,则x = 3。 (也就是说,如果你不认为'global x'是一个定义。) – chepner

+0

非常正确;我限制了对特定问题的回应,并提供了文档的参考。 – Prune

相关问题