Выбор ответа Junior Функции и области видимости спрашивают часто обновлено
UnboundLocalError при изменении глобальной переменной
Вопрос
Что произойдёт при вызове inc()?
count = 0
def inc():
count += 1
return count
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: UnboundLocalError: чтение локальной до присваивания. Присваивание count += 1 делает имя count локальным во всей функции.
Варианты ответа
countстанет 1, глобальная обновитсяNameError: name 'count' is not defined- Создастся локальная
count = 1, глобальная останется 0 UnboundLocalError: чтение локальной до присваиванияправильный ответ
Разбор
Присваивание count += 1 делает имя count локальным во всей функции. При выполнении Python пытается прочитать локальную count, а значения у неё ещё нет: UnboundLocalError (подкласс NameError, но сообщение и тип другие). Чтобы менять глобальную, нужен global count. Тихого создания локальной переменной тоже не будет: чтение происходит раньше записи.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Функции и области видимости»
- Что такое *args и **kwargs
- Перекрытие встроенных имён
- Как передаются аргументы в функцию Python
- Где хранятся переменные замыкания
- Вызов с *args и **kwargs: разбор сигнатуры
- Композиция функций
- Мемоизация через замыкание
- Повтор вызова с ограничением попыток