Пространства имен в Python организованы иерархически и управляются правилом LEGB (Local, Enclosing, Global, Built-in).
Local (Локальное): Самое внутреннее пространство имен. Создается при вызове функции и содержит имена, определенные внутри этой функции (переменные, локальные функции). Существует только во время выполнения функции.
python
Enclosing (Окружающее/Нелокальное): Создается для вложенных функций. Содержит имена из объемлющей (родительской) функции, которые не являются локальными для внутренней функции. Используется ключевое слово nonlocal.
python
Global (Глобальное): Пространство имен на уровне модуля. Содержит имена, определенные в самом модуле (функции, классы, переменные). Доступно из любой части модуля. Создается при импорте модуля.
python
Built-in (Встроенное): Самое внешнее пространство имен. Содержит встроенные функции и исключения Python (print, len, Exception и т.д.). Доступно из любой точки программы.
Python ищет имя, начиная с локального пространства имен, затем переходит на уровень выше в окружающее, затем в глобальное, и, наконец, в builtin. Если имя не найдено, вызывается NameError.
Пространства имен представлены словарями, ключами которых являются имена объектов, а1 значениями — сами объекты.
python