Области видимости в Python
У меня есть функция, которая выдает ошибку:
def func(start):
count = start
def test(label):
print(label, count)
count += 1
return test
Функция test не может найти переменную count в функции func, почему?
Ответы (1 шт):
Кажется, я 100500 раз уже отвечал на подобные вопросы, но могу ещё раз.
Как только вы внутри функции начинаете менять переменную, она автоматически начинает считаться локальной, если явно не указано другое. А локальная переменная не может быть прочитана раньше, чем записана.
Вы же пытаетесь напечатать переменную до того, как её меняете. Да и конструкция count += 1 тоже требует прочитать переменную прежде чем её поменять. Если хотите, чтобы питон понял, что это переменная внешней функции, вы должны её объявить нелокальной, как написал в комментарии entithat.
def test(label):
nonlocal count # говорим питону, что переменная count не локальная
print(label, count)
count += 1