Области видимости в Python

У меня есть функция, которая выдает ошибку:

def func(start):
    count = start

    def test(label):
        print(label, count)
        count += 1

    return test

Функция test не может найти переменную count в функции func, почему?


Ответы (1 шт):

Автор решения: CrazyElf

Кажется, я 100500 раз уже отвечал на подобные вопросы, но могу ещё раз.

Как только вы внутри функции начинаете менять переменную, она автоматически начинает считаться локальной, если явно не указано другое. А локальная переменная не может быть прочитана раньше, чем записана.

Вы же пытаетесь напечатать переменную до того, как её меняете. Да и конструкция count += 1 тоже требует прочитать переменную прежде чем её поменять. Если хотите, чтобы питон понял, что это переменная внешней функции, вы должны её объявить нелокальной, как написал в комментарии entithat.

    def test(label):
        nonlocal count # говорим питону, что переменная count не локальная
        print(label, count)
        count += 1
→ Ссылка