Области видимости переменных в Python
Опубликовано 07 September 2015 в Python
Часто на собеседованиях задают такие вопросы по Python, которые ставят в тупик даже опытных разработчиков. Вопросы не сложные, просто в повседневной деятельности либо не пользуешься тем о чем спрашивают, либо не обращаешь внимание, настолько это уже вошло в привычку.
Так что этот цикл постов посвящен вопросам, которые часто задают на собеседованиях по питону, что бы глянуть перед собеседованием, если понадобится. И первый вопрос из этого списка: каковы правила для областей видимости локальных и глобальных переменных в Python.
Посмотрим на такой код:
def foo():
print(s)
s = "I'm global variable"
foo()
Функция ожидаемо напечатает "I'm global variable". В питоне переменные глобальные, если внутри нового неймспейса (внутри функции или класса) не создается локальная переменная с таким же именем. Код ниже напечатает "I'm local variable":
def foo():
s = "I'm local variable"
print(s)
s = "I'm global variable"
foo()
Глобальные переменные можно использовать внутри вложенного неймспейса, если только не использовать их в левой части оператора присваивания, либо объявлять их внутри неймспейса с ключевым словом global.
def foo2():
global s
s = 'Reset global variable'
foo2() # меняем глобальную переменную
print(s)
Важно! Питон анализирует код функции не строчка за строчкой, а целиком. Так что следующий код свалится с ошибкой UnboundLocalError:
s = "I'm global variable"
def foo():
print(s)
s = 'Reset global variable'
foo()
Вот как-то так. Какие вопросы по питону на собеседованиях задавали вам?
Возник вопрос? Мне всегда можно написать в Twitter: avkorablev