Как использовать глобальные переменные в Python (глобальное ключевое слово)

Узнайте, как глобальные переменные работают в Python. Понимать область видимости переменных, локальные и глобальные пространства имен и способы изменения переменных с помощью ключевого слова global.

Попробуйте это решение в редакторе

Обзор

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

Однако проблема возникает, когда функция пытается изменить (переназначить) глобальную переменную. По умолчанию, когда Python видит присвоение внутри функции, он предполагает, что переменная является локальной для функции. Если вы попытаетесь изменить глобальную переменную, не объявляя ее глобальной, Python создаст локальную переменную с тем же именем, оставив глобальную переменную неизменной (или вызовет `UnboundLocalError`).

Чтобы явно сообщить Python, что вы хотите изменить переменную в глобальном пространстве имен, а не создавать локальную, вы должны объявить ее, используя ключевое слово global внутри функции. Хотя использование глобальных переменных иногда необходимо, обычно это считается плохой практикой при разработке большого программного обеспечения, поскольку затрудняет отслеживание и отладку состояния.

Код и вывод выполнения

Этот сценарий демонстрирует чтение глобальных переменных, ловушку затенения переменных и изменение глобальных переменных с помощью ключевого слова global.

counter = 10 # Global variable

def read_counter():
    # Reading a global variable works out-of-the-box
    print("Reading global counter:", counter)

def shadow_counter():
    # Attempting to assign without 'global' creates a local variable
    counter = 20 # Shadowing
    print("Inside shadow function:", counter)

def modify_counter():
    global counter # Declaring we are writing to global scope
    counter = 50
    print("Inside modify function:", counter)

read_counter()
shadow_counter()
print("Counter after shadow function:", counter) # Remains 10

modify_counter()
print("Counter after modify function:", counter) # Now 50
Терминальный выход
Reading global counter: 10
Inside shadow function: 20
Counter after shadow function: 10
Inside modify function: 50
Counter after modify function: 50

Пошаговая реализация

  • Объявляйте переменные, к которым необходимо иметь глобальный доступ за пределами области действия какой-либо функции.
  • Чтение глобальных переменных внутри любой функции без добавления специальных объявлений.
  • Используйте глобальное ключевое слово (например, глобальный счетчик) внутри функций, если вам нужно изменить значение глобальной переменной.
  • Ограничьте использование глобальных переменных, чтобы предотвратить путаницу в области видимости и загрязнение пространства имен.

Часто задаваемые вопросы

Что такое затенение переменных в Python?

Затенение происходит, когда переменная, объявленная внутри локальной области (например, функция), имеет то же имя, что и переменная во внешней глобальной области. Локальная переменная маскирует глобальную, делая ее временно недоступной внутри этой области.

В чем разница между глобальными и нелокальными ключевыми словами?

global используется для доступа к переменным, определенным в области самого внешнего модуля. Nonlocal используется внутри вложенных функций для доступа к переменным, определенным во внешней (внешней) области действия функции.

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.