在 Python 中,全局变量和局部变量是两种不同的变量类型,它们的作用范围和生命周期有所不同。了解它们的区别对于编写和调试 Python 代码至关重要。下面是对全局变量和局部变量的详细解释。
1. 局部变量
定义: 局部变量是在函数或方法内部定义的变量,仅在该函数或方法的作用范围内可见和可访问。
作用范围: 仅限于定义它们的函数或方法内。
生命周期: 当函数或方法执行时,局部变量被创建。当函数或方法执行完毕时,局部变量会被销毁。
示例:
def my_function():
local_var = 10 # 局部变量
print(local_var)
my_function()
# print(local_var) # 这行会报错,因为 local_var 在函数外不可见
在上面的例子中,local_var
是一个局部变量,只能在 my_function
函数内部访问。
2. 全局变量
定义: 全局变量是在函数或方法之外定义的变量,在整个模块(文件)范围内可见和可访问。
作用范围: 在整个模块中都可见,包括函数和类内部。
生命周期: 从定义开始,直到程序终止或重新赋值。
示例:
global_var = 20 # 全局变量
def my_function():
print(global_var)
my_function() # 输出 20
print(global_var) # 输出 20
在这个例子中,global_var
是一个全局变量,可以在模块的任何地方访问。
3. 修改全局变量
在函数内部修改全局变量时,需要使用 global
关键字来声明你打算修改的是全局变量,而不是创建一个新的局部变量。
示例:
global_var = 30
def modify_global():
global global_var
global_var = 40
modify_global()
print(global_var) # 输出 40
如果不使用 global
关键字,Python 会假设你是在函数内部创建一个新的局部变量,而不会修改全局变量。
示例:
global_var = 50
def modify_global():
global_var = 60 # 创建了一个新的局部变量,而不是修改全局变量
modify_global()
print(global_var) # 输出 50,因为全局变量没有被修改
4. 变量作用域
局部作用域: 变量在函数内定义,只有在函数内可用。
全局作用域: 变量在函数外定义,整个模块范围内可用。
嵌套作用域: 在函数内部定义的函数(嵌套函数)可以访问外部函数的局部变量。
示例:
def outer_function():
outer_var = 70
def inner_function():
print(outer_var) # 可以访问 outer_var
inner_function()
outer_function()
在这个例子中,inner_function
可以访问 outer_function
中定义的 outer_var
变量。
5. 使用 nonlocal
关键字
nonlocal
关键字用于在嵌套函数中修改外层(非全局)变量。
示例:
def outer_function():
outer_var = 80
def inner_function():
nonlocal outer_var
outer_var = 90
inner_function()
print(outer_var) # 输出 90
outer_function()
在这个例子中,nonlocal
关键字用于在 inner_function
中修改 outer_var
,这是 outer_function
的局部变量。
总结
- 局部变量 只能在定义它的函数或方法内部访问。
- 全局变量 在整个模块内都可见,包括函数和方法。
- 使用
global
关键字可以在函数内部修改全局变量。 - 使用
nonlocal
关键字可以在嵌套函数中修改外层函数的局部变量。