Выбор ответа Middle Функции и области видимости обновлено
Зачем нужен nonlocal
Вопрос
Что нужно добавить в inc, чтобы счётчик работал?
def make_counter():
n = 0
def inc():
n += 1
return n
return inc
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: nonlocal n. n объявлена во внешней функции, значит это не глобальная переменная, и global n искал бы n на уровне модуля.
Варианты ответа
global nself.n- Ничего, код работает
nonlocal nправильный ответ
Разбор
n объявлена во внешней функции, значит это не глобальная переменная, и global n искал бы n на уровне модуля. Без объявления n += 1 сделает n локальной для inc и упадёт с UnboundLocalError. nonlocal n говорит: имя из ближайшей охватывающей функции. self здесь неоткуда взять.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Функции и области видимости»
- Что такое *args и **kwargs
- Перекрытие встроенных имён
- Как передаются аргументы в функцию Python
- Где хранятся переменные замыкания
- Вызов с *args и **kwargs: разбор сигнатуры
- Композиция функций
- Мемоизация через замыкание
- Повтор вызова с ограничением попыток