在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