定义:
全局变量:在函数外部定义的变量,可以在整个程序中访问。
局部变量:在函数内部定义的变量,只能在其定义的函数内部访问。
作用域优先级:
- 在 Python 中,作用域的查找顺序是:局部作用域 -> 嵌套作用域 -> 全局作用域 -> 内置作用域。
- 如果在函数内部有同名的局部变量和全局变量,Python 会优先使用局部变量。
全局变量使用要点:
-
全局变量是在函数外部定义的变量,可以在程序的任何地方访问。
如:global_var = 10def func():print(global_var) # 可以访问全局变量func()
-
如果在函数内部想要修改全局变量,需要使用
global
关键字进行声明。 -
全局变量在整个程序中都可以被访问,但是在函数内部如果有同名的局部变量,根据作用域优先级,局部变量会优先使用。
如:global_var = 10def func():global global_var # 声明要使用的是全局变量local_var = 20 # 局部变量print(local_var) # 优先使用局部变量print(global_var) # 使用全局变量func()
局部变量使用要点:
- 局部变量是在函数内部定义的变量,只能在其所在的函数内部访问。
- 函数执行完毕后,局部变量的作用域也随之结束,变量被销毁。
- 如果在函数内部使用与全局变量同名的变量,Python 会将其视为局部变量。
示例:
def func():local_var = 20 # 局部变量print(local_var)func()
# print(local_var) # 这里会报错,因为无法访问局部变量
假如一个函数嵌套了一个函数,在这个嵌套函数中要修改上一级函数的变量,如何做?方法是使用nonlocal
关键字。
如:
def outer_function():x = 10def inner_function():nonlocal xx += 5print("Inner function:", x)inner_function()print("Outer function:", x)outer_function()
在这个示例中,inner_function
内部使用了 nonlocal x
,这样就可以在内部函数中修改外部函数的局部变量 x
。输出是:
Inner function: 15
Outer function: 15
实际使用中,我们还是要注意的是:
1、避免混淆:
当存在同名的全局变量和局部变量时,为了避免混淆和错误,建议使用不同的命名规范,或者明确使用全局变量时使用 global
关键字。
2、避免修改全局变量:
在函数内部修改全局变量可能会导致代码难以理解和维护。如果需要在函数内部修改全局变量,建议使用函数参数进行传递。