闭包/工厂函数

闭包:python函数的内部的变量离开这个函数就失去了作用域而不复存在
但是嵌套函数可以!

def fn1():
    x = 1
    def fn2():
        def fn3():
            print(x)
        return fn3
    return fn2
a = fn1()()()

解析: x是属于fn1函数的,但是在 fn1()调用结束后 我们又加了两个括号调用到了fn3,你看他还是能输出x的值
但嵌套函数只是引用它!不能修改它,要在嵌套函数里修改x的值需要申明nonlocal x

def fn1():
    x = 1

    def fn2():
        def fn3():
            noncal x
            x+=1
            print(x)

        return fn3

    return fn2


a = fn1()()()

工厂函数:
函数return的时候返回一个函数名

参考:https://www.zhihu.com/question/20670869 石溪的答案

你可能感兴趣的:(闭包/工厂函数)