- Типы областей видимости:
- Локальная (
Local
, L): Внутри текущей функции или блока. Переменные, созданные здесь, доступны только внутри.def my_func(): a = 10 # Локальная переменная print(a)
- Объемлющая (
Enclosing function locals
, E): Локальная область видимости для вложенных функций. Позволяет внутренней функции видеть переменные внешней функции.def outer_function(): x = "внешняя" # Переменная объемлющей области для inner_function def inner_function(): print(x) # Доступ к x из объемлющей области inner_function()
- Глобальная (
Global
, G): На верхнем уровне модуля (файла.py
). Переменные, определенные здесь, доступны из любого места модуля.global_var = "Я глобальная" def some_func(): print(global_var) # Доступ к глобальной переменной
- Встроенная (
Built-in
, B): Содержит имена, встроенные в Python (len
,print
,int
,True
,None
, исключения и т.д.). Всегда доступна.- Посмотреть имена:
print(dir(__builtins__))
- Посмотреть имена:
- Локальная (
- Изменение переменных:
global
: Ключевое слово используется внутри функции, чтобы указать, что присваивание значения должно изменить глобальную переменную, а не создавать новую локальную.s = "Глобальное значение" def change_global(): global s # Указываем, что работаем с глобальной s s = "Измененное значение" print("Внутри функции:", s) change_global() print("Снаружи функции:", s) # Вывод: # Внутри функции: Измененное значение # Снаружи функции: Измененное значение
nonlocal
: Ключевое слово используется во вложенной функции, чтобы указать, что присваивание значения должно изменить переменную в объемлющей (не глобальной!) области видимости.def outer(): x = 5 def inner(): nonlocal x # Указываем, что работаем с x из outer x += 1 print('Внутри inner_function:', x) inner() print('Внутри outer_function:', x) outer() # Вывод: # Внутри inner_function: 6 # Внутри outer_function: 6
- Правило LEGB (GLEB): Порядок поиска имен Python:
Local
→Enclosing
→Global
→Built-in
. Python ищет имя по этому пути и использует первое найденное совпадение.
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰