Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Scope
Scope (область видимости) — это область программы, где переменная, функция или класс может быть доступным и использоваться. Python использует правило LEGB для определения scope.
Правило LEGB
L — Local (локальная): переменные внутри функции E — Enclosing (охватывающая): переменные в родительской функции (для вложенных функций) G — Global (глобальная): переменные на уровне модуля B — Built-in (встроенная): встроенные переменные и функции Python
x = "global" # Global scope
def outer():
y = "enclosing" # Enclosing scope
def inner():
z = "local" # Local scope
print(x, y, z) # Доступны все три
inner()
outer() # global enclosing local
print(z) # NameError
Local Scope
Переменные, определённые внутри функции, существуют только в этой функции:
def greet():
name = "Alice" # Local
return f"Hello, {name}"
print(greet()) # Hello, Alice
print(name) # NameError
Global Scope
Переменные, определённые на уровне модуля, доступны везде:
counter = 0 # Global
def increment():
global counter
counter += 1
return counter
print(increment()) # 1
Enclosing Scope
Вложенные функции имеют доступ к переменным родительской функции:
def outer(x):
def inner(y):
return x + y
return inner
add_5 = outer(5)
print(add_5(3)) # 8
Модификация переменной из enclosing scope:
def counter_factory():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
counter = counter_factory()
print(counter()) # 1
print(counter()) # 2
Built-in Scope
Встроенные функции и переменные Python всегда доступны:
print(len([1, 2, 3])) # len — built-in функция
print(True) # True — built-in переменная
Класс Scope
class MyClass:
class_var = 10 # Class scope
def __init__(self):
self.instance_var = 20 # Instance scope
def method(self):
local_var = 30 # Local scope
print(self.instance_var)
Best Practices
- Минимизируй глобальное состояние — используй классы и параметры вместо глобальных переменных
- Избегай shadowing встроенных функций
- Используй параметры вместо глобальных переменных
Понимание scope критично для написания чистого и предсказуемого кода.