global и nonlocal влияют на разрешение имён при компиляции функции. В CPython обращения получают инструкции для глобальных имён или ячеек замыкания вместо обычных локальных переменных.
Что происходит с байт-кодом при использовании ключевых слов global и nonlocal?
global и nonlocal влияют на разрешение имён при компиляции функции. В CPython обращения получают инструкции для глобальных имён или ячеек замыкания вместо обычных локальных переменных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
global и nonlocal влияют на разрешение имён при компиляции функции. В CPython обращения получают инструкции для глобальных имён или ячеек замыкания вместо обычных локальных переменных.
global связывает присваивание с пространством имён модуля; типичны LOAD_GLOBAL и STORE_GLOBAL. nonlocal обращается к существующему имени внешней функции через LOAD_DEREF и STORE_DEREF. Само объявление не выполняет поиск при каждом запуске отдельной инструкцией. Конкретный байт-код зависит от версии CPython и виден через dis; это не универсальный контракт всех реализаций Python.