if语句中的Python变量范围

时间:2011-09-12 01:53:51

标签: python

在Python中,if语句中的变量作用域是否在if语句之外可见? (来自Java背景,所以发现这有点奇怪)

在下面的例子中,name首先在if-block中定义,但变量在if-block之外也是可见的。我期待发生错误,但'joe'会被打印出来。

if 1==1:
    name = 'joe'
print(name)

3 个答案:

答案 0 :(得分:43)

if语句没有在Python中定义范围。

无论是循环,with语句,try / except等等。

只有模块,函数和类定义范围。

请参阅Python教程中的Python Scopes and Namespaces

答案 1 :(得分:2)

是的,在Python中,if语句中的变量作用域在if语句之外是可见的。 两个相关的问题进行了一次交流讨论:

Short Description of the Scoping Rules?

Python variable scope error

答案 2 :(得分:1)

函数中使用的所有python变量都存在于函数级别范围内。 (忽略全局变量和闭包变量)

在这种情况下很有用:

if foo.contains('bar'):
   value = 2 + foo.count('b')
else:
   value = 0

这样我就不必在if语句之前声明变量了。