Читать переменную внешней функции можно и без nonlocal. nonlocal нужен, чтобы присваивание во внутренней функции изменяло существующую привязку в ближайшей подходящей внешней области.
[имя] спросил: Правильно ли, что nonlocal даёт внутренней функции доступ к переменной внешней функции?
Читать переменную внешней функции можно и без nonlocal. nonlocal нужен, чтобы присваивание во внутренней функции изменяло существующую привязку в ближайшей подходящей внешней области.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Читать переменную внешней функции можно и без nonlocal. nonlocal нужен, чтобы присваивание во внутренней функции изменяло существующую привязку в ближайшей подходящей внешней области.
Например, счётчик внутри замыкания с count += 1 требует nonlocal count, иначе count считается локальным и возникает UnboundLocalError при чтении. Изменение содержимого внешнего списка через append не перепривязывает имя и обычно nonlocal не требует. Объявление относится к области функции, а не к глобальному имени; для последнего существует global.