在三层闭包函数中的应用,global在外层函数和内层函数中的使用,通过定义全局变量在不同层级的函数中进行修改变量的值
注意在每一层函数中调用全局变量var时,都需要在每一层函数中先声明全局变量var,然后再进行该变量的操作。不然就会报错,不符合python的语法规则。
def closure_func_global(num):
global var # 使用 global 使得 var 成为全局变量
var = num + 3 # var 被定义为全局变量
def inner():
global var # 在 inner 函数中声明 var 为全局变量,允许修改全局 var
print("在inner()内部之前, var = {}".format(var)) # 使用全局变量 var
var = 2 # 修改全局 var,注意如果不修改外层函数变量的值是用不到global var的。
print("在inner()内部之后, var = {}".format(var)) # 打印修改后的 var
def wap():
global var
print("在wap()函数内部之前, var = {}".format(var)) # 使用全局变量 var
var += 10
print("在wap()函数内部之后, var = {}".format(var)) # 打印修改后的 var
return var
return wap
return inner
if __name__ == '__main__':
inner = closure_func_global(5)
wap = inner()
var = wap()
print("var的最后执行结果:", var)

代码执行顺序和解析过程:
在这段代码中,定义了一个 closure_func_global 函数,它通过内嵌函数来修改全局变量 var。不过,代码中有一点需要注意的地方,特别是全局变量的作用和内嵌函数的顺序问题。
逐步解析如下。
代码执行顺序:
closure_func_global(5) 被调用,num = 5,然后 var 被设置为 num + 3 = 8,并且 var 被声明为全局变量。
closure_func_global 返回了 inner 函数,这时 inner 函数还没有执行。
inner() 被调用,进入 inner 函数:
打印当前全局变量 var,显示 8。
然后 var 被赋值为 2,并打印修改后的值。
inner 函数内部定义了 wap 函数,这个函数增加 var 的值并返回。
wap() 被调用:
在 wap 中,首先打印当前的全局变量 var,它已经被 inner 修改为 2。
然后 var 被加 10,变成 12,并打印修改后的值。
最后返回 var(也就是 12)。
打印最终的 var 值,应该是 12。
代码执行的输出:
在inner()内部之前, var = 8
在inner()内部之后, var = 2
在wap()函数内部之前, var = 2
在wap()函数内部之后, var = 12
var的最后执行结果: 12
解析:
在 inner 函数内,var 被修改为 2,并且 wap 函数在 inner 函数外部被调用时,var 作为全局变量被继续修改,因此最终 var 值为 12。
你在每个函数中都使用了 global var 来确保对全局变量 var 的修改。
结论:
最终的 var 值是通过多层嵌套函数逐步修改的,结果是 12。

浙公网安备 33010602011771号