- Ключевое слово global в Python
- Что это такое
- Что нужно знать прежде, чем работать с global
- Как использовать global
- Пример 1. Получаем доступ к глобальной переменной внутри функции
- Пример 2. Изменяем глобальную переменную внутри функции
- Пример 3. Изменяем глобальную переменную внутри функции с помощью global
- Глобальные переменные в модулях Python
- Пример 4. Используем глобальную переменную между модулями
- Как использовать global во вложенных функция
- Пример 5. Используем глобальные переменные во вложенных функциях
- Глобальные переменные в Python
- Пример
- Использование ключевого слова global для доступа к глобальной переменной
- Краткое описание функции globals()
- Глобальные переменные в словаре globals()
- Заключение
Ключевое слово global в Python
В этой статье вы узнаете, для чего нужно ключевое слово global и когда его использовать. А еще мы подробнее поговорим о глобальных переменных.
Поэтому перед прочтением этой статьи ознакомьтесь со статьей «Глобальные, локальные и нелокальные переменные в Python».
Что это такое
Ключевое слово global позволяет изменять переменную вне текущей области видимости в Python. global используется для создания глобальной переменной и изменения ее в локальной области видимости.
Что нужно знать прежде, чем работать с global
- Когда мы создаем переменную внутри функции, она по умолчанию является локальной.
- Когда мы определяем переменную вне функции, она по умолчанию является глобальной. В этом случае не нужно использовать ключевое слово global .
- Ключевое слово global нужно для получения доступа к глобальной переменной и изменения ее внутри функции, то есть внутри локальной области видимости.
- Использовать ключевое слово global вне функции бессмысленно.
Как использовать global
Пример 1. Получаем доступ к глобальной переменной внутри функции
c = 1 # глобальная переменная def add(): print(c) add()
Все работает! Но что если нам нужно изменить глобальную переменную внутри функции?
Пример 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 , в нем будем хранить глобальные переменные.
Создаем файл update.py , чтобы изменять глобальные переменные.
import config config.a = 10 config.b = "алфавит"
Создаем файл main.py . Его будем использовать, чтобы отслеживать изменения значений глобальных переменных.
Теперь запустим файл main.py .
Итак, мы создали 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() .
Глобальные переменные в Python
Глобальные переменные определяются вне функции. Мы можем получить доступ к глобальной переменной во всех частях программы Python.
Пример
Давайте посмотрим на простой пример объявления глобальной переменной. Затем мы будем использовать эту глобальную переменную в функции.
website = "JournalDev.com" def return_website(): return website print(f'My favorite website is ')
My favorite website is JournalDev.com
Переменная «website» определяется в программе вне функции. Таким образом, он становится глобальной переменной.
Использование ключевого слова global для доступа к глобальной переменной
Если внутри функции с тем же именем определена переменная, то мы должны использовать ключевое слово global для доступа к глобальной переменной. В противном случае будет использоваться значение локальной переменной.
Давайте посмотрим на быстрый пример использования ключевого слова global для доступа к глобальным переменным.
website = "JournalDev.com" def print_website(): global website print(f'My favorite website is ') website = 'Wikipedia.com' print(f'My favorite website is ') print_website()
My favorite website is JournalDev.com My favorite website is Wikipedia.com
Если мы не используем ключевое слово global, программа выдаст сообщение об ошибке «UnboundLocalError: локальная переменная, на которую имеется ссылка перед назначением».
Лучше всего избегать использования того же имени, что и у глобальной переменной, и избегать конфликтов имен.
Краткое описание функции globals()
Функция globals() в Python возвращает словарь, представляющий текущую глобальную таблицу символов. Этот словарь содержит имя глобальных переменных и их значения. Мы можем использовать эту функцию для быстрого получения информации обо всех глобальных переменных.
Программа Python хранит информацию о программе в таблицах символов.
Есть два типа таблиц символов:
- Таблица локальных символов – хранит информацию, относящуюся к локальной области действия программы.
- Глобальная таблица символов – хранит информацию, относящуюся к глобальной области действия программы.
Таблица символов содержит подробную информацию об именах переменных, методах, классах и т.д.
Функция globals() не принимает никаких аргументов.
, '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': '/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_globals_example.py', '__cached__': None>
Он также печатает скрипт, из которого вызывается эта функция.
Давайте посмотрим на результат, если та же функция вызывается из интерпретатора Python.
$ python3.7 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print(globals()) , '__spec__': None, '__annotations__': <>, '__builtins__': > >>>
На этот раз в выходных данных нет атрибута __file__.
Глобальные переменные в словаре globals()
Как мы упоминали ранее, глобальная таблица символов содержит информацию о глобальных переменных.
Давайте посмотрим на это на простом примере.
name = 'Pankaj' print(globals())
, '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': '/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_globals_example.py', '__cached__': None, 'name': 'Pankaj'>
Глобальный словарь символов также содержит переменную name.
Одна из особенностей globals() заключается в том, что мы можем изменять переменные в глобальном словаре. Поскольку это словарь, мы также можем получить значение определенного ключа.
globals()['name'] = 'David' print(globals()['name'])
Посмотрим, содержит ли globals() переменные локальной области видимости или нет. Для этого давайте определим функцию и некоторые переменные внутри нее.
def fx(): local = '' global gl gl = 'Global' fx() # calling fx() to set the variables print(globals()) print(globals()['gl'])
, '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': '/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_globals_example.py', '__cached__': None, 'name': 'David', 'fx': , 'gl': 'Global'> Global
Переменная gl является частью глобального словаря, поскольку ее область действия глобальна. «Локальная» переменная не является частью глобального словаря из-за локальной области видимости.
Заключение
Глобальные переменные в Python очень легко определить и использовать. Функция globals() возвращает глобальные переменные, и ее можно использовать при отладке кода.
Мы можем использовать его для идентификации глобальных переменных области видимости и функций, доступных программе. Мы также можем изменять данные глобальных переменных, но это не рекомендуется и обычно не требуется в обычных программах.