Ключевое слово 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()
.