美文网首页
浅谈python的闭包

浅谈python的闭包

作者: 刘圣凯 | 来源:发表于2019-03-04 15:58 被阅读0次

今天在学习python的时候学到了返回函数,这里先说一下返回函数,一个求和函数,如果不需要马上调用,我们可以使用返回函数

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum

这样当我们调用 lazy_sum() 时,返回的并不是结果,还是一个求和函数,

>>> f = lazy_sum(1, 3, 5, 7, 9)
>>> f
<function lazy_sum.<locals>.sum at 0x101c6ed90>

当我们调用 f()时,才真正计算求和结果,
看到这里是不是很熟悉,在这个例子中,我们在函数 lazy_sum 中又定义了函数 sum ,并且,内部函数 sum 可以引用外部函数lazy_sum 的参数和局部变量,当 lazy_sum 返回函数 sum 时,相关参数和变量都保存在返回的函数中,并且例子中的 f 并没有马上执行, 没错 ,这就是我们熟悉的闭包了

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

如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值(即创建一个新的作用域),无论该循环变量后续如何更改,已绑定到函数参数的值不变

def count():
    def f(j):
        def g():
            return j*j
        return g
    fs = []
    for i in range(1, 4):
        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
    return fs

闭包是语言的一种特性,再次提醒, 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

相关文章

  • 闭包

    浅谈 python 的闭包思想 首先 python的闭包使用方法是:在方法A内添加方法B,然后return 方法B...

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • python闭包学习

    参考文章 python闭包python闭包一步一步教你认识Python闭包深入浅出python闭包

  • 浅谈python的闭包

    今天在学习python的时候学到了返回函数,这里先说一下返回函数,一个求和函数,如果不需要马上调用,我们可以使用返...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • 浅谈闭包

    闭包是函数式语言里面很重要的部分,但是网上很多文章却只讲闭包的应用,而鲜有谈及其本质。 理解闭包的关键在于,知道它...

  • 浅谈闭包

    简要来讲,闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。 ...

  • 浅谈闭包

    前端开发者经常在面试时会碰到这样一道题:什么是闭包?首先我们来谈谈闭包的定义:函数A有内置函数B,当内置函数B调用...

  • 浅谈闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

  • 浅谈闭包

    《你不知道的JavaScript》这样描述: 当函数可以记住并访问所在的词法作用域时,就产生了闭包, 即使函数是在...

网友评论

      本文标题:浅谈python的闭包

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