Если я создаю глобальную переменную в одной функции, как я могу использовать эту переменную в другой функции?
Мы можем создать глобал с помощью следующей функции:
def create_global_variable():
global global_variable # must declare it to be a global first
# modifications are thus reflected on the module's global scope
global_variable = 'Foo'
Написание функции фактически не запускает ее код. Поэтому мы вызываем функцию create_global_variable
:
>>> create_global_variable()
Использование глобалов без изменений
Вы можете просто использовать его, если вы не собираетесь изменять, на какой объект он указывает:
Например,
def use_global_variable():
return global_variable + '!!!'
и теперь мы можем использовать глобальную переменную:
>>> use_global_variable()
'Foo!!!'
Модификация глобальной переменной изнутри функции
Чтобы указать глобальную переменную на другом объекте, вам необходимо снова использовать ключевое слово global:
def change_global_variable():
global global_variable
global_variable = 'Bar'
Обратите внимание, что после написания этой функции код, фактически изменяющий ее, все еще не запустился:
>>> use_global_variable()
'Foo!!!'
Итак, после вызова функции:
>>> change_global_variable()
мы видим, что глобальная переменная была изменена. Имя global_variable
теперь указывает на 'Bar'
:
>>> use_global_variable()
'Bar!!!'
Обратите внимание, что "глобальный" в Python не является действительно глобальным - он только глобален для уровня модуля. Таким образом, он доступен только для функций, написанных в модулях, в которых он является глобальным. Функции запоминают модуль, в котором они написаны, поэтому, когда они экспортируются в другие модули, они все равно ищут модуль, в котором они были созданы, для поиска глобальных переменных.
Локальные переменные с тем же именем
Если вы создадите локальную переменную с тем же именем, она заменит глобальную переменную:
def use_local_with_same_name_as_global():
# bad name for a local variable, though.
global_variable = 'Baz'
return global_variable + '!!!'
>>> use_local_with_same_name_as_global()
'Baz!!!'
Но использование этой неправильно названной локальной переменной не меняет глобальную переменную:
>>> use_global_variable()
'Bar!!!'
Обратите внимание, что вам следует избегать использования локальных переменных с такими же именами, как у глобальных, если вы точно не знаете, что делаете, и у вас есть веская причина для этого. Я еще не сталкивался с такой причиной.