Область переменной Python в операторах if
В Python существуют переменные области внутри if-операторов, видимые вне if-statement? (исходя из фона Java, поэтому найдите это немного странно)
В следующем случае имя сначала определяется внутри if-блока, но переменная также видна вне if-блока. Я ожидал ошибки, но "joe" печатается.
if 1==1:
name = 'joe'
print(name)
Ответы
Ответ 1
Операторы if
не определяют область действия в Python.
Также не выполняются петли, операторы with
, try
/except
и т.д.
Только модули, функции и классы определяют области действия.
См. Области и пространства имен Python в учебнике Python.
Ответ 2
Да, в Python переменные области внутри if-операторов видны вне if-statement.
Два связанных вопроса дали интересное обсуждение:
Краткое описание правил определения области видимости?
и
Ошибка области переменной Python
Ответ 3
Все переменные python, используемые в функции, живут в области уровня функции. (игнорируя глобальные и замыкающие переменные)
Это полезно в случае, например:
if foo.contains('bar'):
value = 2 + foo.count('b')
else:
value = 0
Таким образом, я не должен объявлять переменную перед оператором if.