Как Python определяет, какая переменная изменяется внутри функции?

Область имени определяется при компиляции функции: присваивание делает имя локальным, если нет global или nonlocal. Это отличается от изменения объекта, на который имя уже ссылается.

Короткий ответ

Что ответить на собеседовании

Область имени определяется при компиляции функции: присваивание делает имя локальным, если нет global или nonlocal. Это отличается от изменения объекта, на который имя уже ссылается.

Подробный разбор

Ответ с пояснениями

Область имени определяется при компиляции функции: присваивание делает имя локальным, если нет global или nonlocal. Это отличается от изменения объекта, на который имя уже ссылается.

В f(): x = x + 1 имя x локально во всей функции, поэтому чтение до присваивания приводит к UnboundLocalError, даже если снаружи есть x. global направляет присваивание в пространство модуля, nonlocal — к существующему имени внешней функции. При items.append(1) имя не перепривязывается: меняется объект. Сложение с присваиванием items += [...] включает перепривязку имени и потому влияет на определение области.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее