在读这篇文章之前,确保你对 Python 全局、本地和非本地变量 有一定的基础。
创新互联公司专注于企业全网营销推广、网站重做改版、东风网站定制设计、自适应品牌网站建设、H5页面制作、成都商城网站开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为东风等各大城市提供网站开发制作服务。
在 Python 中,global
关键字允许你修改当前范围之外的变量。它用于创建全局变量并在本地上下文中更改变量。
在 Python 中,有关 global
关键字基本规则如下:
global
关键字。global
关键字在一个函数中来读写全局变量。global
关键字没有效果。我们来举个例子。
c = 1 # 全局变量
def add():
print(c)
add()
运行程序,输出为:
1
但是我们可能有一些场景需要从函数内部修改全局变量。
c = 1 # 全局变量
def add():
c = c + 2 # 将 c 增加 2
print(c)
add()
运行程序,输出显示错误:
UnboundLocalError: local variable 'c' referenced before assignment
这是因为在函数中,我们只能访问全局变量但是不能修改它。
解决的办法是使用 global
关键字。
c = 0 # global variable
def add():
global c
c = c + 2 # 将 c 增加 2
print("Inside add():", c)
add()
print("In main:", c)
运行程序,输出为:
Inside add(): 2
In main: 2
在上面的程序中,我们在 add()
函数中定义了 c
将其作为全局关键字。
然后,我们给变量 c
增加 2
,即 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
没有全局关键字的作用。
调用 bar()
之前和之后, 变量 x
取本地变量的值,即 x = 20
。在 foo()
函数之外,变量 x
会取在函数 bar()
中的值,即 x = 25
。这是因为在 bar()
中,我们对 x
使用 global
关键字创建了一个全局变量(本地范围)。
如果我们在 bar()
函数内进行了任何修改,那么这些修改就会出现在本地范围之外,即 foo()
。
网站栏目:初识Python:global关键字
文章URL:http://www.mswzjz.cn/qtweb/news14/279364.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能