📅  最后修改于: 2020-09-19 13:55:10             🧑  作者: Mango
在阅读本文之前,请确保您已掌握Python全局,局部和非局部变量的一些基础知识。
在Python, global
关键字允许您在当前作用域之外修改变量。它用于创建全局变量并在局部上下文中对变量进行更改。
Python中global
关键字的基本规则是:
global
关键字。 global
关键字在函数内部读写全局变量。 global
关键字无效。 让我们举个例子。
c = 1 # global variable
def add():
print(c)
add()
当我们运行上面的程序时,输出将是:
1
但是,在某些情况下,我们需要从函数内部修改全局变量。
c = 1 # global variable
def add():
c = c + 2 # increment c by 2
print(c)
add()
当我们运行上面的程序时,输出显示错误:
UnboundLocalError: local variable 'c' referenced before assignment
这是因为我们只能访问全局变量,而不能从函数内部对其进行修改。
解决方案是使用global
关键字。
c = 0 # global variable
def add():
global c
c = c + 2 # increment by 2
print("Inside add():", c)
add()
print("In main:", c)
当我们运行上面的程序时,输出将是:
Inside add(): 2
In main: 2
在上面的程序中,我们将c
定义为add()
函数内部的全局关键字。
然后,我们将变量c
增加1
,即c = c + 2
。之后,我们调用add()
函数。最后,我们打印全局变量c
。
如我们所见, 函数c = 2
之外的全局变量也发生了变化。
在Python,我们创建一个模块config.py
来保存全局变量,并在同一程序中的Python模块之间共享信息。
这是我们如何在Python模块之间共享全局变量。
创建一个config.py
文件,以存储全局变量
a = 0
b = "empty"
创建一个update.py
文件,以更改全局变量
import config
config.a = 10
config.b = "alphabet"
创建一个main.py
文件,以测试值的变化
import config
import update
print(config.a)
print(config.b)
当我们运行main.py
文件时,输出将是
10
alphabet
在上面,我们创建了三个文件: config.py
, update.py
和main.py
模块config.py
存储a
和b
全局变量。在update.py
文件中,我们导入config.py
模块并修改a
和b
的值。同样,在main.py
文件中,我们同时导入config.py
和update.py
模块。最后,我们打印并测试全局变量的值,无论它们是否更改。
这是在嵌套函数使用全局变量的方法。
def foo():
x = 20
def bar():
global x
x = 25
print("Before calling bar: ", x)
print("Calling bar now")
bar()
print("After calling bar: ", x)
foo()
print("x in main: ", x)
输出为:
Before calling bar: 20
Calling bar now
After calling bar: 20
x in main: 25
在上面的程序中,我们在嵌套函数 bar()
声明了一个全局变量。在foo()
函数内部, x
不影响global关键字。
在调用bar()
之前和之后,变量x
取局部变量的值,即x = 20
。在foo()
函数,变量x
将采用在bar()
函数定义的值,即x = 25
。这是因为我们在x
使用了global
关键字来在bar()
函数 (局部作用域)内创建全局变量。
如果我们在bar()
函数内部进行任何更改,则更改将显示在本地范围之外,即foo()
。