在Python中,if语句中的变量作用域是否在if语句之外可见? (来自Java背景,所以有点奇怪)if语句中的Python变量范围
在以下情况下,名称首先在if块中定义,但该变量在if块之外也是可见的。我期待一个错误发生,但'乔'被打印。
if 1==1:
name = 'joe'
print(name)
在Python中,if语句中的变量作用域是否在if语句之外可见? (来自Java背景,所以有点奇怪)if语句中的Python变量范围
在以下情况下,名称首先在if块中定义,但该变量在if块之外也是可见的。我期待一个错误发生,但'乔'被打印。
if 1==1:
name = 'joe'
print(name)
if
语句没有在Python中定义范围。
也不做循环,with
陈述,try
/except
等
只有模块,函数和类定义范围。
请参阅Python教程中的Python Scopes and Namespaces。
是的,在Python中,if语句内的变量作用域在if语句之外是可见的。 两个相关问题发表了interestion讨论:
Short Description of the Scoping Rules?
和
在函数中使用的所有变量蟒蛇生活在函数级别范围。 (忽略全局和封闭变量)
它是有用的情况下,像这样的:
if foo.contains('bar'):
value = 2 + foo.count('b')
else:
value = 0
这样,我没有if语句前声明变量。
@Owen,呃?参考? –
哦......对不起..我错了。 – Owen
@Owen你正在考虑我假设的'nonlocal'关键字,它没有定义范围,只是增加了一个语法来引用一个封闭但非全局的范围。 – agf