Ключевое слово global в Python: как и когда использовать
Освоение ключевого слова global в Python: как и когда использовать
Это руководство объясняет ключевое слово global в Python, его правила, практические случаи использования и лучшие практики управления глобальными переменными между модулями.
Что такое ключевое слово global?
В Python ключевое слово global позволяет объявить, что переменная внутри функции ссылается на переменную уровня модуля, а не на новую локальную. Это необходимо, когда функции нужно читать или изменять переменную, существующую вне её собственной области видимости.
Правила использования global
- Переменные, созданные внутри функции, по умолчанию локальны.
- Переменные, определенные на уровне модуля, автоматически глобальны;
globalне нужен, когда только читаете их. - Используйте
globalвнутри функции, когда намерены присвоить значение переменной уровня модуля. - Размещение
globalвне функции не имеет эффекта.
Практическое использование global
Ниже приведены иллюстративные примеры, демонстрирующие как подводные камни, так и правильный подход.
Пример 1: доступ к глобальной переменной изнутри функции
c = 1 # глобальная переменная
def add():
print(c)
add()
Вывод:
1
Здесь c читается успешно, потому что внутри add() не происходит присваивания.
Пример 2: попытка изменить глобальную переменную без global
c = 1 # глобальная переменная
def add():
c = c + 2 # попытка изменить c
print(c)
add()
Вывод:
UnboundLocalError: local variable 'c' referenced before assignment
Ошибка возникает, потому что Python считает c новой локальной переменной, на которую ссылаются до присваивания.
Пример 3: изменение глобальной переменной с помощью global
c = 0 # глобальная переменная
def add():
global c
c = c + 2
print("Inside add():", c)
add()
print("In main:", c)
Вывод:
Inside add(): 2 In main: 2
Объявив global c, функция обновляет переменную c уровня модуля, и изменение видно вне функции.
Обмен глобальными переменными между модулями Python
Для более крупных приложений обычно централизуют конфигурацию в выделенном модуле, таком как config.py. Другие модули могут импортировать и изменять эти значения, обеспечивая согласованное состояние во всей программе.
Пример 4: глобальные переменные между модулями
Создайте config.py:
a = 0
b = "empty"
Создайте update.py для изменения глобальных переменных:
import config
config.a = 10
config.b = "alphabet"
Создайте main.py для проверки изменений:
import config
import update
print(config.a)
print(config.b)
Вывод:
10 alphabet
Этот паттерн хранит общее состояние в одном месте, позволяя контролируемым обновлениям из других модулей.
Использование global во вложенных функциях
Когда вложенная функция должна изменить переменную, локальную для внешней функции, ключевое слово global всё равно можно применить для создания действительно глобальной переменной.
Пример 5: глобальная переменная во вложенной функции
def foo():
x = 20
def bar():
global x
x = 25
print("Before calling bar:", x)
print("Calling bar now")
bar()
print("After calling bar:", x)
foo()
print("x in main:", x)
Вывод:
Before calling bar: 20 Calling bar now After calling bar: 20 x in main: 25
Внутри foo(), x остается локальной переменной. Вложенная bar() объявляет x как global, поэтому присваивание влияет на переменную уровня модуля и видно после завершения foo().
Хотя global может быть полезным, обычно лучше проектировать функции, которые возвращают новые значения, а не мутируют глобальное состояние. Это способствует более чистому коду и легче тестированию. Для детальных правил языка см. официальную документацию Python о global statement.
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Глобальные, локальные и nonlocal переменные в Python: понимание и применение
- Словари в Python: создание, манипуляции и продвинутые техники
- Итераторы в Python: как они работают и как создать свои
- Замыкания в Python: как вложенные функции захватывают переменные
- Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
- Обзор Python: высокоуровневый, читаемый, интерактивный и объектно-ориентированный язык