在Python中,if语句中的变量作用域是否在if语句之外可见? (来自Java背景,所以发现这有点奇怪)
在下面的例子中,name首先在if-block中定义,但变量在if-block之外也是可见的。我期待发生错误,但'joe'会被打印出来。
if 1==1:
name = 'joe'
print(name)
答案 0 :(得分:43)
if
语句没有在Python中定义范围。
无论是循环,with
语句,try
/ except
等等。
只有模块,函数和类定义范围。
请参阅Python教程中的Python Scopes and Namespaces。
答案 1 :(得分:2)
答案 2 :(得分:1)
函数中使用的所有python变量都存在于函数级别范围内。 (忽略全局变量和闭包变量)
在这种情况下很有用:
if foo.contains('bar'):
value = 2 + foo.count('b')
else:
value = 0
这样我就不必在if语句之前声明变量了。