局部作用域和全局作用域的区别
- 局部作用域:
- 函数内部定义的变量具有局部作用域。这些变量只能在函数内部访问和使用,函数执行结束后,局部变量所占用的内存通常会被释放。例如:
def local_scope_example():
local_var = 10 # local_var 具有局部作用域
print(local_var)
local_scope_example()
# print(local_var) # 这行代码会报错,因为 local_var 超出了作用域
- 全局作用域:
- 在模块顶层定义的变量具有全局作用域。全局变量可以在模块的任何函数内部访问(除非在函数内有同名的局部变量遮蔽了它)。例如:
global_var = 20 # global_var 具有全局作用域
def global_scope_example():
print(global_var)
global_scope_example()
在函数内部访问和修改全局变量
- 访问全局变量:直接使用全局变量名即可在函数内访问。例如:
global_num = 30
def access_global():
print(global_num)
access_global()
- 修改全局变量:如果要在函数内部修改全局变量,需要使用
global
关键字声明变量。例如:
global_count = 50
def modify_global():
global global_count
global_count = global_count + 10
print(global_count)
modify_global()
闭包示例
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
closure = outer_function(10)
result = closure(5)
print(result)
闭包的作用
- 数据隐藏和封装:闭包可以让内部函数访问外部函数的变量,同时这些变量对于外部来说是隐藏的。例如在上面的例子中,
x
变量对于外部代码是隐藏的,只有通过 inner_function
才能间接访问和操作它。
- 保持状态:外部函数执行结束后,其局部变量在闭包中依然保持状态。在上面的例子中,
outer_function
执行完毕返回 inner_function
后,x
的值(10)依然被 inner_function
记住,当 closure(5)
调用 inner_function
时,可以使用这个保持的 x
值进行计算。