在三层闭包函数中的应用,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)


image

代码执行顺序和解析过程:
在这段代码中,定义了一个 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。

posted @ 2025-09-01 10:51  大海一个人听  阅读(6)  评论(0)    收藏  举报