← Назад к вопросам

Что такое Scope?

1.0 Junior🔥 61 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое 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

  1. Минимизируй глобальное состояние — используй классы и параметры вместо глобальных переменных
  2. Избегай shadowing встроенных функций
  3. Используй параметры вместо глобальных переменных

Понимание scope критично для написания чистого и предсказуемого кода.

Что такое Scope? | PrepBro