TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7394 4.01K
❓ Почему Python внезапно считает глобальную переменную локальной

Наверняка вы ловили UnboundLocalError: переменная читалась нормально, ты добавил присваивание ниже в функции — и всё сломалось.

Коротко, что происходит на самом деле 👇

🔹 Python не выполняет код построчно

Перед запуском функция компилируется. На этом этапе Python решает, какие переменные локальные, а какие глобальные.

🔹 Одно присваивание = локальная переменная

Если внутри функции есть x = ..., то x считается локальной во всей функции, даже выше по коду.

X = 10

def f():
print(X) # 💥 UnboundLocalError
X = 5


Python заранее решает: X — локальная → глобальную он даже не проверяет.

🔹 Это видно в байткоде

* LOAD_GLOBAL — поиск в глобальном словаре (медленно)
* LOAD_FAST_CHECK — доступ к слоту локальной переменной (очень быстро)

Если переменная помечена как локальная, используется LOAD_FAST_CHECK.
Слот пуст → UnboundLocalError.

Почему так сделано:
🏮 Производительность — локальные переменные лежат в массиве, а не в dict
🏮 Предсказуемость (lexical scoping) — область видимости понятна по коду
🏮 Безопасность — нельзя случайно изменить глобальное состояние

Если нужна именно глобальная:
def f():
global X
print(X)
X = 5


UnboundLocalError — не баг и не «Python сошёл с ума», а следствие компиляции и оптимизаций.
Если ошибка указывает на строку чтения — ищи присваивание ниже в функции.

👉 Подробный разбор с dis и байткодом — по ссылке.

📍 Навигация: Вакансии • Задачи • Собесы

🐸 Библиотека питониста

#буст
  • 👍 9
  • ❤ 6
  • 🥱 1
More from @pyproglib
  1. Oct 3, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  2. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  3. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  4. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  5. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  6. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →