跳到主要内容

Python 全局关键字

提示
  1. 全局变量访问与修改global 关键字允许在函数内部访问和修改全局变量。
  2. 函数内局部变量限制:在函数内部直接修改全局变量会引发错误,必须先用 global 关键字声明。
  3. 嵌套函数中的全局变量:即使在嵌套函数中,使用 global 关键字也可以声明和修改全局变量。

在 Python 中,global 关键字允许我们修改当前作用域之外的变量。

它用于创建全局变量,并在局部上下文中对该变量进行更改。

在学习 global 关键字之前,请确保你已经了解了 Python 变量作用域 的一些基础知识。

访问和修改 Python 全局变量

首先让我们尝试从函数内部访问全局变量,

c = 1 # 全局变量

def add():
print(c)

add()

# 输出:1

在这里,我们可以看到我们已经从函数内部访问了一个全局变量。

然而,如果我们尝试从函数内部修改全局变量,如:

# 全局变量
c = 1

def add():

# c 加 2
c = c + 2

print(c)

add()

输出

UnboundLocalError: local variable 'c' referenced before assignment

这是因为我们只能访问全局变量,但不能从函数内部修改它。

解决这个问题的方法是使用 global 关键字。

示例:使用 global 从函数内部更改全局变量

# 全局变量
c = 1

def add():
# 使用 global 关键字
global c

# c 加 2
c = c + 2

print(c)

add()

# 输出:3

在上面的示例中,我们在 add() 函数内将 c 定义为 global 关键字。

然后,我们将变量 c 增加了 2,即 c = c + 2

我们可以看到在调用 add() 时,全局变量 c 的值从 1 更改为 3

嵌套函数中的 Global

在 Python 中,我们也可以在嵌套函数中使用 global 关键字。例如,

def outer_function():
num = 20 # 这是 outer_function 的局部变量

def inner_function():
global num # 这将会创建或修改全局命名空间中的 num
num = 25

print("调用 inner_function() 之前: ", num) # 输出: 20
inner_function()
print("调用 inner_function() 之后: ", num) # 输出: 20,因为这里的 num 仍然是 outer_function 的局部变量

outer_function()
print("在两个函数外部: ", num) # 输出: 25,因为这里的 num 是在 global 命名空间中修改的

输出

调用 inner_function() 之前: 20
调用 inner_function() 之后: 20
在两个函数外部: 25

在上面的示例中,我们在嵌套函数 inner_function() 中声明了一个全局变量。

outer_function() 内部,num 不受 global 关键字的影响。

在调用 inner_function() 之前和之后,num 采用局部变量的值,即 num = 20

outer_function() 函数外部,num 将采用 inner_function() 函数中定义的值,即 x = 25

这是因为我们在 inner_function() 函数(局部作用域)内使用了 global 关键字将 num 创建为全局变量。

因此,如果我们在 inner_function() 函数内做出任何更改,更改将出现在局部作用域之外,即 outer_function()

global 关键字的规则

Python 中 global 关键字的基本规则是:

  • 当我们在函数内部创建一个变量时,它默认是局部的。
  • 当我们在函数外部定义一个变量时,它默认是全局的。你不必使用 global 关键字。
  • 我们使用 global 关键字在函数内部读取和写入全局变量。
  • 在函数外部使用 global 关键字没有效果。