闭包

作者: huashen_9126 | 来源:发表于2020-04-25 22:39 被阅读0次

    闭包是指延伸了作用域的函数,其中包含函数定义体中引用、但是不在定义体中定义的非全局变量。
    闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。

    当一个内嵌函数引用其外部作用域的变量,我们就会得到一个闭包. 总结一下,创建一个闭包必须满足以下几点:

    1. 必须有一个内嵌函数
    2. 内嵌函数必须引用外部函数中的变量
    3. 外部函数的返回值必须是内嵌函数

    闭包是一种函数,它会保留定义函数时存在的自由变量的绑定,这样调用函数时虽然定义作用域不可用了,但仍能使用那些绑定。

    返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

    def createCounter():
        n = 0
        def counter():
            nonlocal n
            n = n + 1
            return n
        return counter
    # 测试:
    counterA = createCounter()
    print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
    counterB = createCounter()
    if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
        print('测试通过!')
    else:
        print('测试失败!')
    

    ps:上面的代码用到了nonelocal,用法:https://zhuanlan.zhihu.com/p/96508259

    相关文章

      网友评论

          本文标题:闭包

          本文链接:https://www.haomeiwen.com/subject/qzynvhtx.html