Skip to content

一段示例代码(这段代码是错误的):

python
num = 100

def d1():
    num += 1
    print(num)

d1()
print(num)

执行它会报错UnboundLocalError,这是因为 d1 中对变量 num 进行了赋值操作,这使得 Python 将 num 视为局部变量。然而,在进行赋值之前,尝试对 num 进行自增操作,此时 num 尚未被赋值

所以需要使用 global 关键字来告诉 Python num 是一个全局变量,因此 num += 1 操作会修改全局变量 num 而不是创建一个新的局部变量

Python 的作用域规则如下:

  • 如果在函数内部对一个变量进行赋值操作(例如 num += 1 或 num = 101),Python 会认为这个变量是一个局部变量。
  • 如果在函数内部访问一个变量而没有对其进行赋值操作,Python 会先在局部作用域中查找该变量,如果找不到,则会在全局作用域中查找。