Выбор ответа Middle Функции и области видимости обновлено

Зачем нужен nonlocal

Вопрос

Что нужно добавить в inc, чтобы счётчик работал?

def make_counter():
    n = 0
    def inc():
        n += 1
        return n
    return inc

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

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

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

Коротко

Правильный ответ: nonlocal n. n объявлена во внешней функции, значит это не глобальная переменная, и global n искал бы n на уровне модуля.

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

  1. global n
  2. self.n
  3. Ничего, код работает
  4. nonlocal nправильный ответ

Разбор

n объявлена во внешней функции, значит это не глобальная переменная, и global n искал бы n на уровне модуля. Без объявления n += 1 сделает n локальной для inc и упадёт с UnboundLocalError. nonlocal n говорит: имя из ближайшей охватывающей функции. self здесь неоткуда взять.

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

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