Ключевое слово global в Python

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

Поэтому перед прочтением этой статьи ознакомьтесь со статьей «Глобальные, локальные и нелокальные переменные в Python».

Что это такое

Ключевое слово global позволяет изменять переменную вне текущей области видимости в Python. global используется для создания глобальной переменной и изменения ее в локальной области видимости.

Что нужно знать прежде, чем работать с global

  • Когда мы создаем переменную внутри функции, она по умолчанию является локальной.
  • Когда мы определяем переменную вне функции, она по умолчанию является глобальной. В этом случае не нужно использовать ключевое слово global.
  • Ключевое слово global нужно для получения доступа к глобальной переменной и изменения ее внутри функции, то есть внутри локальной области видимости.  
  • Использовать ключевое слово global вне функции бессмысленно.

Как использовать global

Пример 1. Получаем доступ к глобальной переменной внутри функции

c = 1 # глобальная переменная

def add():
    print(c)

add()

Вывод:

1

Все работает! Но что если нам нужно изменить глобальную переменную внутри функции?

Пример 2. Изменяем глобальную переменную внутри функции

c = 1 # глобальная переменная
    
def add():
    c = c + 2 # прибавляем 2 к c 
    print(c)

add()

Вывод:

UnboundLocalError: local variable 'c' referenced before assignment

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

Для этого и нужно ключевое слово global.

Пример 3. Изменяем глобальную переменную внутри функции с помощью global

c = 0 # глобальная переменная

def add():
    global c
    c = c + 2 # прибавляем 2 к c
    print("Внутри функции add():", c)

add()
print("В глобальной области видимости:", c)

Вывод: 

Внутри функции add(): 2
В глобальной области видимости: 2

В приведенной выше программе мы определяем c как глобальную переменную внутри функции add() с помощью ключевого слова `global`.

Внутри функции мы также увеличиваем переменную c` на 2, то есть выполняем действие c = c + 2. И, наконец, выводим на экран глобальную переменную c.

Как мы видим, глобальная переменная c изменилась не только внутри функции, но и в глобальной области видимости. И там, и там c = 2.

Глобальные переменные в модулях Python

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

Вот как можно использовать глобальные переменные между модулями Python.

Пример 4. Используем глобальную переменную между модулями

Создаем файл config.py, в нем будем хранить глобальные переменные. 

a = 0
b = "пусто"

Создаем файл update.py, чтобы изменять глобальные переменные.

import config

config.a = 10
config.b = "алфавит"

Создаем файл main.py. Его будем использовать, чтобы отслеживать изменения значений глобальных переменных. 

Теперь запустим файл main.py

Вывод:

10
алфавит

Итак, мы создали 3 файла: config.py, update.py, и main.py.

Модуль config.py хранит глобальные переменные a и b. В файле update.py мы импортируем модуль config.py и изменяем значения a и b. Точно так же в файл main.py мы импортируем config.py и update.py. Наконец, мы печатаем и проверяем значения глобальных переменных независимо от того, изменились они или нет.

Как использовать global во вложенных функция

Пример 5. Используем глобальные переменные во вложенных функциях

def foo():
    x = 20

    def bar():
        global x
        x = 25
    
    print("До вызова bar(): ", x)
    print("Вызываем bar()")
    bar()
    print("После вызова bar(): ", x)

foo()
print("x в глобальной областим видимости: ", x)

Вывод:

До вызова bar(): 20
Вызываем bar()
После вызова bar(): 20
x в глобальной области видимости: 25

В приведенной выше программе мы объявили глобальную переменную внутри вложенной функции bar(). Внутри функции foo() ключевое слово global никак не влияет на переменную x.

До и после вызова bar() переменная x принимает значение локальной переменной, т. е. x = 20. Вне функции foo() переменная x примет значение, определенное в функции x, т. е. x = 25. Так произойдет потому, что мы использовали ключевое слово global, чтобы создать глобальную переменную x внутри функции bar(), то есть в локальной области видимости. 

Если мы сделаем какие-либо изменения внутри функции bar(), изменения отобразятся и за пределами локальной области видимости, то есть за пределами функции foo().

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©