Назад к вопросам
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()