Работа с глобальными переменными в Python: функции и порядок

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для модификации глобальной переменной внутри функции в Python следует использовать ключевое слово global:

Python
Скопировать код
x = "великий питон"

def усилить_уровень():
    global x
    x = "великий ревущий питон"

усилить_уровень()
print(x)  # Выведет: великий ревущий питон

Без использования global переменная x, объявленная в функции, становится локальной и не влияет на глобальную x.

Кинга Идем в IT: пошаговый план для смены профессии

Три основы работы с глобальными переменными

Функциональная последовательность: порядок значит многое

В Python важным является не только порядок самих операций, но и последовательность вызова функций: она определяет текущее состояние глобальной переменной.

Мутация или перепривязка: выбор стратегии

Привязка имени к новому объекту требует ключевого слова global. Мутация же списков и словарей такого требовательна не будет — они могут изменяться напрямую.

Python
Скопировать код
команда = ["Гарри", "Гермиона", "Рон"]

def добавить_в_команду():
    команда.append("Дамблдор")

добавить_в_команду()
print(команда)  # Выведет: ["Гарри", "Гермиона", "Рон", "Дамблдор"]

Параметры функции по умолчанию: фиксация состояния

Значения параметров по умолчанию фиксируются в момент определения функции, не зависимо от того, как меняются глобальные переменные.

Python
Скопировать код
год = 2001

def магия_времени(год_рождения_гарри=год):
    print(год_рождения_гарри)

год = 2021
магия_времени()  # Выведет: 2001

Чтобы параметры отражали текущее состояние, используйте None:

Python
Скопировать код
год = 2001

def магия_случилась(год_рождения_гарри=None):
    if год_рождения_гарри is None:
        год_рождения_гарри = год
    print(год_рождения_гарри)

год = 2021
магия_случилась()  # Выведет: 2021

Когда глобальные переменные ведут себя непредсказуемо!

'global' в Python: средство или искушение?

Глобальные переменные подходят в том случае, если не злоупотреблять ими и использовать осознанно, но другие решения могут быть предпочтительнее.

Оживление мертвого кода

Слишком много глобальных переменных могут запутать код и затруднить его поддержку.

Эстетика кода: Воспользуйтесь "ЗОЛОТым" правилом

Замена глобальных переменных на локальные зачастую улучшает качество кода: используйте Здравый смысл, Оптимизируйте ресурсы, Локализуйте переменные и Облегчите работу с кодом.

Визуализация

В образном смысле глобальные переменные напоминают объявления в общем холле офиса: все их видят и могут использовать.

Python
Скопировать код
глобальное_объявление = '📌 Перекус в 16:00!'

def время_праздника():
    print(глобальное_объявление)  # Все сотрудники могут увидеть объявление
Markdown
Скопировать код
**Время праздника**: 📌 'Перекус в 16:00!'
# Подтверждает, что глобальные переменные доступны в различных функциях.

Требуется осторожность и внимательность

Будьте аккуратны: глобальные переменные требуют особое внимание.

Следите за областями видимости

Избегайте ситуаций, когда глобальные и локальные переменные имеют одинаковые имена.

Ищите альтернативы

Прежде чем решиться на использование глобальных переменных, рассмотрите другие возможные подходы к решению задачи.

Обеспечение качества: Тестируйте, тестируйте и еще раз тестируйте!

Тестирование — важный аспект работы с глобальными переменными, как и с любым другим кодом.

Полезные материалы

  1. Область видимости в Python и правило LEGB: разрешение имен в коде – Real Python
  2. Часто задаваемые вопросы по программированию — Документация Python 3.12.2
  3. Глобальное ключевое слово Python (с примерами)
  4. The Python Guru: глобальные, локальные и нелокальные переменные Python
  5. Распространенные ошибки — Руководство хичхайкера по Python