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

В чем разница между локальной и глобальной переменной?

1.0 Junior🔥 291 комментариев
#Python Core

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

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

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

Локальные vs Глобальные переменные

Это фундаментальная концепция scope (области видимости) в Python. Область видимости определяет, где можно использовать переменную.

Глобальная переменная

global_var = 100  # Доступна везде в модуле

def function1():
    print(global_var)  # 100 — может читать

def function2():
    print(global_var)  # 100 — может читать

function1()
function2()
print(global_var)  # 100 — доступна на уровне модуля

Характеристики глобальной переменной:

  • Объявлена на уровне модуля
  • Видна во всех функциях и классах модуля
  • Существует в течение всего выполнения программы
  • Изменение влияет на все, кто её использует

Локальная переменная

def function():
    local_var = 50  # Существует только внутри функции
    print(local_var)

function()  # 50
print(local_var)  # NameError: переменная не существует

Характеристики локальной переменной:

  • Объявлена внутри функции
  • Видна только в той функции
  • Создаётся при вызове функции
  • Уничтожается при выходе из функции

Проблема: Чтение и запись

count = 0

def increment():
    print(count)  # Может читать глобальную переменную

increment()  # OK: 0
count = 0

def increment():
    count = count + 1  # UnboundLocalError!
    print(count)

increment()

Почему ошибка? Python видит присваивание (count = ...) и рассматривает count как локальную. Но в выражении count + 1 левая часть (count) ещё не определена.

Решение: Keyword global

count = 0

def increment():
    global count  # Указываем: используй глобальную!
    count = count + 1
    print(count)

increment()  # 1
increment()  # 2
print(count)  # 2

Когда использовать global:

  • Нужно изменить глобальную переменную внутри функции
  • Указывается в начале функции

Nested функции и LEGB

Python ищет переменные по правилу LEGB:

global_var = "Global"

def outer():
    enclosing_var = "Enclosing"
    
    def inner():
        local_var = "Local"
        print(local_var)
        print(enclosing_var)
        print(global_var)
    
    inner()

outer()

LEGB порядок поиска:

  1. Local — локальная переменная
  2. Enclosing — в охватывающей функции
  3. Global — в модуле
  4. Built-in — встроенные (len, print)

Nonlocal: для Enclosing scope

def outer():
    count = 0
    
    def inner():
        nonlocal count
        count += 1
        print(count)
    
    inner()  # 1
    inner()  # 2
    print(count)  # 2

outer()

Best Practices

  • Избегай глобальных переменных — используй параметры
  • Используй локальные переменные — быстрее и безопаснее
  • Классы вместо глобалов — лучший паттерн
  • Явно указывай scope — с global и nonlocal

Резюме

  • Глобальная — доступна везде в модуле
  • Локальная — видна только в функции
  • LEGB — порядок поиска переменных
  • Лучшая практика — минимизируй глобальные переменные
В чем разница между локальной и глобальной переменной? | PrepBro