Python объявление глобальной переменной

Ключевое слово 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 до ее объявления. Дело в том, что получить доступ к глобальной переменной внутри функции мы можем, а вот изменять ее в локальной области видимости — уже нет.

Читайте также:  Sort object by date java

Для этого и нужно ключевое слово 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 .

Читайте также:  Табличная верстка html пример

До и после вызова 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 хранит информацию о программе в таблицах символов.

Есть два типа таблиц символов:

  1. Таблица локальных символов – хранит информацию, относящуюся к локальной области действия программы.
  2. Глобальная таблица символов – хранит информацию, относящуюся к глобальной области действия программы.
Читайте также:  Ищу работу html css

Таблица символов содержит подробную информацию об именах переменных, методах, классах и т.д.

Функция 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() возвращает глобальные переменные, и ее можно использовать при отладке кода.

Мы можем использовать его для идентификации глобальных переменных области видимости и функций, доступных программе. Мы также можем изменять данные глобальных переменных, но это не рекомендуется и обычно не требуется в обычных программах.

Источник

Оцените статью