管理变量范围
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
为什么范围很重要
- 局部变量使函数 保持独立—一个函数中的变量不能搞砸另一个函数。
- 读取全局值对于常量(如配置值)是正常的。
- 在函数内部写入全局变量,是难以发现的错误的常见根源。 优先使用参数和返回值。