ЛАБОРАТОРИЯ / Обучение
Система готова
PYTHON / SCOPE

Область видимости и lambda

25 мин8 ЗАДАНИЙ32 ВОПРОСА В БАНКЕ
01

Что это и зачем

Область видимости определяет, где доступно имя. Python ищет его по правилу LEGB: Local, Enclosing, Global, Builtins.

02

Как это работает

Присваивание внутри функции обычно создаёт локальное имя. global меняет привязку в модуле, nonlocal — в ближайшей внешней функции. Замыкание хранит доступ к внешней области. lambda создаёт функцию из одного выражения.

example.py
x = 10
def f():
    x = 2
    return x
print(f(), x)
03

Когда применять

lambda полезна для небольшого key в sorted, но сложное поведение лучше назвать через def. Передавайте зависимости аргументами. Замыкания удобны для фабрик небольшого поведения и сохранения состояния.

04

Границы применения

Избегайте global для бизнес-состояния. Замыкания в цикле захватывают имя, а не снимок текущего значения: при отложенном вызове все могут увидеть последнее значение. Для снимка используйте default или фабрику.

05

Ошибки и лучшие практики

Чтение имени до локального присваивания вызывает UnboundLocalError. nonlocal требует существующее имя внешней функции. lambda может вернуть значение, но не содержит обычные statements.

Понятна идея? Теперь проверим её в действии.