Работа с глобальными переменными в Python: функции и порядок
Быстрый ответ
Для модификации глобальной переменной внутри функции в Python следует использовать ключевое слово global
:
x = "великий питон"
def усилить_уровень():
global x
x = "великий ревущий питон"
усилить_уровень()
print(x) # Выведет: великий ревущий питон
Без использования global
переменная x
, объявленная в функции, становится локальной и не влияет на глобальную x
.
Три основы работы с глобальными переменными
Функциональная последовательность: порядок значит многое
В Python важным является не только порядок самих операций, но и последовательность вызова функций: она определяет текущее состояние глобальной переменной.
Мутация или перепривязка: выбор стратегии
Привязка имени к новому объекту требует ключевого слова global
. Мутация же списков и словарей такого требовательна не будет — они могут изменяться напрямую.
команда = ["Гарри", "Гермиона", "Рон"]
def добавить_в_команду():
команда.append("Дамблдор")
добавить_в_команду()
print(команда) # Выведет: ["Гарри", "Гермиона", "Рон", "Дамблдор"]
Параметры функции по умолчанию: фиксация состояния
Значения параметров по умолчанию фиксируются в момент определения функции, не зависимо от того, как меняются глобальные переменные.
год = 2001
def магия_времени(год_рождения_гарри=год):
print(год_рождения_гарри)
год = 2021
магия_времени() # Выведет: 2001
Чтобы параметры отражали текущее состояние, используйте None
:
год = 2001
def магия_случилась(год_рождения_гарри=None):
if год_рождения_гарри is None:
год_рождения_гарри = год
print(год_рождения_гарри)
год = 2021
магия_случилась() # Выведет: 2021
Когда глобальные переменные ведут себя непредсказуемо!
'global' в Python: средство или искушение?
Глобальные переменные подходят в том случае, если не злоупотреблять ими и использовать осознанно, но другие решения могут быть предпочтительнее.
Оживление мертвого кода
Слишком много глобальных переменных могут запутать код и затруднить его поддержку.
Эстетика кода: Воспользуйтесь "ЗОЛОТым" правилом
Замена глобальных переменных на локальные зачастую улучшает качество кода: используйте Здравый смысл, Оптимизируйте ресурсы, Локализуйте переменные и Облегчите работу с кодом.
Визуализация
В образном смысле глобальные переменные напоминают объявления в общем холле офиса: все их видят и могут использовать.
глобальное_объявление = '📌 Перекус в 16:00!'
def время_праздника():
print(глобальное_объявление) # Все сотрудники могут увидеть объявление
**Время праздника**: 📌 'Перекус в 16:00!'
# Подтверждает, что глобальные переменные доступны в различных функциях.
Требуется осторожность и внимательность
Будьте аккуратны: глобальные переменные требуют особое внимание.
Следите за областями видимости
Избегайте ситуаций, когда глобальные и локальные переменные имеют одинаковые имена.
Ищите альтернативы
Прежде чем решиться на использование глобальных переменных, рассмотрите другие возможные подходы к решению задачи.
Обеспечение качества: Тестируйте, тестируйте и еще раз тестируйте!
Тестирование — важный аспект работы с глобальными переменными, как и с любым другим кодом.
Полезные материалы
- Область видимости в Python и правило LEGB: разрешение имен в коде – Real Python
- Часто задаваемые вопросы по программированию — Документация Python 3.12.2
- Глобальное ключевое слово Python (с примерами)
- The Python Guru: глобальные, локальные и нелокальные переменные Python
- Распространенные ошибки — Руководство хичхайкера по Python