Назад к вопросам
Junior
112
questionbank

Как работает правило LEGB в Python?

Sobes Copilot

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

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

sobes.tech AI

Правило LEGB определяет порядок, в котором Python ищет имена (переменные, функции, классы и т.д.) в разных областях видимости (scopes). Аббревиатура расшифровывается как:

  • Local (Локальная область): Внутри текущей функции.
  • Enclosing (Охватывающая область): Охватывающая функция (если есть), в которой определена текущая функция (для вложенных функций).
  • Global (Глобальная область): На уровне модуля.
  • Built-in (Встроенная область): Встроенные имена Python (например, print, len, range).

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

# Built-in scope: 'print', 'len' etc.

x = 10 # Global scope

def outer():
    y = 20 # Enclosing scope

    def inner():
        z = 30 # Local scope
        print(z) # Looks for 'z' in Local -> Enclosing -> Global -> Built-in
        print(y) # Looks for 'y' in Local -> Enclosing -> Global -> Built-in
        print(x) # Looks for 'x' in Local -> Enclosing -> Global -> Built-in
        # print(non_existent) # Would raise NameError

    inner()
    # print(z) # Would raise NameError as 'z' is local to inner()

outer()