Ключевое слово 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().
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.