if语句中的Python变量范围

Python variable scope in if-statements

本问题已经有最佳答案,请猛点这里访问。

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

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

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

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

循环,with语句,try / except等都没有。

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

请参阅Python教程中的Python范围和命名空间。


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

范围规则的简短描述?

Python变量范围错误


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

这样的情况很有用:

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

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