Найти в Дзене

Области видимости (Scopes) в Python

Область видимости (Scope) — это область кода, в которой переменная может быть использована. Python использует правило LEGB для поиска переменных: 1. L (Local): Внутри функции. 2. E (Enclosing): Внешние функции (для вложенных функций). 3. G (Global): На уровне модуля. 4. B (Built-in): Встроенные имена (например, print, len). Python ищет переменные в следующем порядке: Позволяет изменять глобальные переменные внутри функции. Используется во вложенных функциях для изменения переменных из внешней области. Вложенная функция "запоминает" переменные из внешней области видимости. - globals(): Возвращает словарь глобальных переменных. - locals(): Возвращает словарь локальных переменных. Можно ли их изменять? - globals(): Да (но осторожно!). - locals(): Нет (изменения могут не отразиться на реальных переменных). Переменная исключения (например, e в except Exception as e) существует только внутри блока except. Исключение: Если переменная сохранена вне блока. - LEGB определяет порядок пои
Оглавление

Определение

Область видимости (Scope) — это область кода, в которой переменная может быть использована. Python использует правило LEGB для поиска переменных:

1. L (Local): Внутри функции.

2. E (Enclosing): Внешние функции (для вложенных функций).

3. G (Global): На уровне модуля.

4. B (Built-in): Встроенные имена (например, print, len).

Правило LEGB

Python ищет переменные в следующем порядке:

Ключевые слова global и nonlocal

global

Позволяет изменять глобальные переменные внутри функции.

-2

nonlocal

Используется во вложенных функциях для изменения переменных из внешней области.

-3

Замыкания (Closures)

Вложенная функция "запоминает" переменные из внешней области видимости.

-4

Функции globals() и locals()

- globals(): Возвращает словарь глобальных переменных.

- locals(): Возвращает словарь локальных переменных.

Можно ли их изменять?

- globals(): Да (но осторожно!).

- locals(): Нет (изменения могут не отразиться на реальных переменных).

Область видимости переменных исключений

Переменная исключения (например, e в except Exception as e) существует только внутри блока except.

-6

Исключение: Если переменная сохранена вне блока.

-7

Примеры частых ошибок

1. Создание локальной переменной вместо изменения глобальной

-8

2. Использование nonlocal без внешней переменной

-9

Заключение

- LEGB определяет порядок поиска переменных.

- global и nonlocal позволяют изменять переменные из внешних областей.

- Замыкания сохраняют состояние внешних переменных.

- globals() и locals() дают доступ к переменным, но изменять их нужно осторожно.

- Переменные исключений недоступны вне блока except.

Совет: Избегайте изменения глобальных переменных через global — это усложняет отладку. Используйте возвращаемые значения и параметры функций.