Назад к вопросам
Middle+
68
questionbank

Как происходит размещение пространств имен в Python?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Пространства имен в Python организованы иерархически и управляются правилом LEGB (Local, Enclosing, Global, Built-in).

  1. Local (Локальное): Самое внутреннее пространство имен. Создается при вызове функции и содержит имена, определенные внутри этой функции (переменные, локальные функции). Существует только во время выполнения функции.

    def my_function():
        x = 10  # Локальная переменная
        print(x)
    
  2. Enclosing (Окружающее/Нелокальное): Создается для вложенных функций. Содержит имена из объемлющей (родительской) функции, которые не являются локальными для внутренней функции. Используется ключевое слово nonlocal.

    def outer_function():
        y = 20
        def inner_function():
            nonlocal y # Обращение к переменной из окружающего пространства
            print(y)
        inner_function()
    
  3. Global (Глобальное): Пространство имен на уровне модуля. Содержит имена, определенные в самом модуле (функции, классы, переменные). Доступно из любой части модуля. Создается при импорте модуля.

    z = 30 # Глобальная переменная в модуле
    def another_function():
        global z # Обращение к глобальной переменной
        print(z)
    
  4. Built-in (Встроенное): Самое внешнее пространство имен. Содержит встроенные функции и исключения Python (print, len, Exception и т.д.). Доступно из любой точки программы.

Python ищет имя, начиная с локального пространства имен, затем переходит на уровень выше в окружающее, затем в глобальное, и, наконец, в builtin. Если имя не найдено, вызывается NameError.

Пространства имен представлены словарями, ключами которых являются имена объектов, а1 значениями — сами объекты.

print(locals())  # Локальное пространство имен текущей функции
print(globals()) # Глобальное пространство имен текущего модуля