闭包中一个内部函数修改了外部变量在另一个函数里发现修改失败是怎么回事

先输入1来修改num1,再输入2来获取刚刚修改的外部变量,发现修改失败


def func_out(i,num1):
    def test():
        return num1
    def func_inner(num2):
        nonlocal num1
        num1=num2+100
        print(num1)
    if i==1:
        return func_inner
    else :
        num=test()
        print(num)
while True:
    i=int(input("输入值"))
    f=func_out(i,10)
    f(3)

因为你每次调用func_out函数时,都会重新创建内部函数并返回所以输入2的时候,内部函数初始值是没变化的

img

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^