T25:全局关键字
在此篇教程中,你将了解全局关键字、全局变量以及何时使用全局关键字。
在阅读本篇教程之前,请确保你已掌握此篇:[Python]函数⁽²⁴⁾|全局,局部,非局部变量 的一些基础知识
何为全局关键字
在 Python 中,global
关键字允许你修改当前范围之外的变量。它用于创建全局变量,并在局部的上下文中对变量进行更改。
全局关键字规则
Python 中 global
关键字的基本规则为:
- 当在函数内部创建变量时,默认情况下它是局部的;
- 当在函数外定义一个变量时,它默认是全局的。因此不必使用
global
关键字; - 使用
global
关键字,可在函数内部读/写全局变量; - 在函数外使用
global
关键字则无效。
使用 global 关键字
示例 1-从函数内部访问全局变量
c = 1 # 全局变量
def add():
print(c)
add()
输出
1
但是,我们可能在某些场景下,需要从函数内部修改全局变量,如示例 2。
示例 2-从函数内部修改全局变量
c = 1 # 全局变量
def add():
c = c + 2 # 将 c 增加 2
print(c)
add()
当运行上面的程序时,输出并显示一个错误:
UnboundLocalError: local variable 'c' referenced before assignment
这是因为我们只能访问全局变量而不能从函数内部修改它。
对此的解决方案即:使用 global
关键字,如示例 3。
示例 3-使用 global 从函数内部更改全局变量
c = 0 # 全局变量
def add():
global c
c = c + 2 # 将 c 增加 2
print("add()函数内部c:", c)
add()
print("main函数内c:", c)
当运行上面的程序时,输出:
add()函数内部c: 2 main函数内c: 2
在上面的程序中,我们在add()函数中将c定义为全局关键字。
然后,我们将变量c增加2,即c = c + 2。之后,我们调用add()函数。最后,再打印全局变量c。
可以看到,函数外的全局变量c也发生了变化,即c = 2
。
跨 Python 模块的全局变量
在 Python 中,我们创建了一个模块 config.py
来保存全局变量并在同一程序中的 Python 模块之间共享信息。
以下是我们如何在 python 模块之间共享全局变量。
示例 4-跨 Python 模块共享全局变量
创建一个 config.py
文件,用于存储全局变量;
a = 0
b = "empty"
创建一个 update.py
文件,以更改全局变量;
import config
config.a = 10
config.b = "TianTian"
创建一个 main.py
文件,以测试值的变化情况;
import config
import update
print(config.a)
print(config.b)
当我们运行 main.py
文件时,输出:
10 TianTian
在上面,我们创建了三个文件:config.py
、update.py
和 main.py
。
模块 config.py
存储 a
和 b
的全局变量。在 update.py
文件中,我们导入 config.py
模块并修改 a
和 b
的值。同样,在 main.py
文件中,我们同时导入 config.py
和 update.py
模块。最后,打印并测试全局变量的值。
嵌套函数中的全局变量
以下是如何在嵌套函数中使用全局变量。
示例 5-在嵌套函数中使用全局变量
def foo():
x = 20
def bar():
global x
x = 25
print("调用bar前: ", x)
print("调用bar")
bar()
print("调用bar后: ", x)
foo()
print("main函数的x: ", x)
输出
调用bar前: 20 调用bar 调用bar后: 20 main函数的x: 25
在上面的程序中,我们在嵌套函数 bar()
中声明了一个全局变量。在 foo()
函数内部, x
没有受 global
关键字的影响。
在调用 bar()
前后,变量 x
取局部变量的值,即 x = 20
。在 foo()
函数之外,变量 x
取 bar()
函数中定义的值,即 x = 25
。这是因为我们在 x
中使用 global
关键字在 bar()
函数(局部作用域)内创建了全局变量。
如果在 bar()
函数内部进行任何值的更改,这些更改作用将出现在局部范围之外,即 foo()
。
转载请注明:XAMPP中文组官网 » [Python]函数⁽²⁵⁾|全局关键字