管理变量范围

已完成

Tip

有关更多详细信息,请参阅 “文本和图像 ”选项卡!

范围 是代码的区域,其中存在变量,可以使用。 了解范围可以帮助您编写不会意外相互干扰的函数,并帮助您避免一整类令人困惑的 bug。

局部变量

在函数中创建的变量是 局部变量。 它仅在函数运行时存在,并且无法从函数外部看到它。

def calculate_total(price, tax):
    total = price + tax     # `total` is local to this function
    return total

calculate_total(10, 2)
print(total)                # NameError: name 'total' is not defined

每次调用某个函数都会获取其自己的局部变量集,因此函数不会意外覆盖彼此的数据。

全局变量

在任何函数外部创建的变量都是 全局变量。 函数可以 读取 全局变量,但默认情况下,它们无法 更改 它们。

message = "Hello"

def greet():
    print(message)   # Reading a global variable is fine

greet()              # Output: Hello

如果尝试将新值分配给全局存在的变量,Python将其视为新的局部变量,全局值将单独保留。

color = "blue"

def change_color():
    color = "red"   # This creates a new local variable, not the global one

change_color()
print(color)        # Output: blue

关键字 global (谨慎使用)

如果确实需要从函数内部更改全局变量,可以使用关键字声明它 global :

count = 0

def increment():
    global count
    count = count + 1

increment()
print(count)   # Output: 1

但是,从内部函数修改全局使得代码更难遵循,更难测试。 更好的模式是将值作为参数传入并返回更新的值:

def increment(count):
    return count + 1

count = 0
count = increment(count)
print(count)   # Output: 1

为什么范围很重要

  • 局部变量使函数 保持独立—一个函数中的变量不能搞砸另一个函数。
  • 读取全局值对于常量(如配置值)是正常的。
  • 在函数内部写入全局变量,是难以发现的错误的常见根源。 优先使用参数和返回值。