Выбор ответа Junior Функции и области видимости спрашивают часто обновлено

UnboundLocalError при изменении глобальной переменной

Вопрос

Что произойдёт при вызове inc()?

count = 0

def inc():
    count += 1
    return count

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: UnboundLocalError: чтение локальной до присваивания. Присваивание count += 1 делает имя count локальным во всей функции.

Варианты ответа

  1. count станет 1, глобальная обновится
  2. NameError: name 'count' is not defined
  3. Создастся локальная count = 1, глобальная останется 0
  4. UnboundLocalError: чтение локальной до присваиванияправильный ответ

Разбор

Присваивание count += 1 делает имя count локальным во всей функции. При выполнении Python пытается прочитать локальную count, а значения у неё ещё нет: UnboundLocalError (подкласс NameError, но сообщение и тип другие). Чтобы менять глобальную, нужен global count. Тихого создания локальной переменной тоже не будет: чтение происходит раньше записи.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.