Как происходит размещение пространств имен в Python?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Пространства имен в Python организованы иерархически и управляются правилом LEGB (Local, Enclosing, Global, Built-in).
-
Local (Локальное): Самое внутреннее пространство имен. Создается при вызове функции и содержит имена, определенные внутри этой функции (переменные, локальные функции). Существует только во время выполнения функции.
def my_function(): x = 10 # Локальная переменная print(x) -
Enclosing (Окружающее/Нелокальное): Создается для вложенных функций. Содержит имена из объемлющей (родительской) функции, которые не являются локальными для внутренней функции. Используется ключевое слово
nonlocal.def outer_function(): y = 20 def inner_function(): nonlocal y # Обращение к переменной из окружающего пространства print(y) inner_function() -
Global (Глобальное): Пространство имен на уровне модуля. Содержит имена, определенные в самом модуле (функции, классы, переменные). Доступно из любой части модуля. Создается при импорте модуля.
z = 30 # Глобальная переменная в модуле def another_function(): global z # Обращение к глобальной переменной print(z) -
Built-in (Встроенное): Самое внешнее пространство имен. Содержит встроенные функции и исключения Python (
print,len,Exceptionи т.д.). Доступно из любой точки программы.
Python ищет имя, начиная с локального пространства имен, затем переходит на уровень выше в окружающее, затем в глобальное, и, наконец, в builtin. Если имя не найдено, вызывается NameError.
Пространства имен представлены словарями, ключами которых являются имена объектов, а1 значениями — сами объекты.
print(locals()) # Локальное пространство имен текущей функции
print(globals()) # Глобальное пространство имен текущего модуля