Что такое пространство имен (namespace) в Python и зачем оно нужно?

«Что такое пространство имен (namespace) в Python и зачем оно нужно?» — вопрос из категории Python, который задают на 23% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Пространство имен (namespace) в Python — это система, которая обеспечивает уникальность имен объектов (переменных, функций, классов). Ее основная задача — избежать конфликтов имен, когда разные объекты случайно получают одинаковые идентификаторы.

Технически, это словарь, где ключами являются имена, а значениями — сами объекты.

Виды пространств имен

Python использует несколько пространств имен, и поиск имени идет в следующем порядке (правило LEGB):

  1. L (Local) — Локальное: имена внутри текущей функции.
  2. E (Enclosing) — Замыкающее: имена во внешних функциях (для вложенных функций).
  3. G (Global) — Глобальное: имена на уровне модуля.
  4. B (Built-in) — Встроенное: предопределенные имена в Python (print, len, str и т.д.).

Пример

x = "global_x"  # Глобальное пространство имен (G)

def outer_func():
    y = "enclosing_y"  # Замыкающее пространство имен (E)

    def inner_func():
        z = "local_z"  # Локальное пространство имен (L)
        print(z)  # Найдено в L
        print(y)  # Найдено в E
        print(x)  # Найдено в G
        print(len(x)) # len найдено в B (Built-in)

    inner_func()

outer_func()

Каждый модуль в Python создает свое собственное глобальное пространство имен, что позволяет использовать одинаковые имена функций или переменных в разных файлах без конфликтов.