加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python中的闭包

发布时间:2020-12-20 10:40:09 所属栏目:Python 来源:网络整理
导读:返回函数 函数在python中是可以的作为返回值的 假如原来有这样一个函数 def cal_sum(*args): s=0 for i in args: s+=i return s cal_sum(1,2,3,4,5)15 假如现在不着急立刻求和,向一会儿在计算可以返回函数 def lazy_sum(*args): def sum(): s=0 for i in ar

返回函数

函数在python中是可以的作为返回值的

假如原来有这样一个函数

>>> def cal_sum(*args):
    s=0
    for i in args:
        s+=i
    return s

>>> cal_sum(1,2,3,4,5)
15

假如现在不着急立刻求和,向一会儿在计算可以返回函数

>>> def lazy_sum(*args):
    def sum():
        s=0
        for i in args:
            s+=i
        return s
    return sum

>>> f=lazy_sum(1,5,6)
>>> f
<function lazy_sum.<locals>.sum at 0x00000000033F8B70>
>>> f()
21
>>>

我们通过观察可以发现,定义的sum函数可以使用lazy_sum中传入的参数args,而当lazy_sum函数将sum函数返回给f的时候,f包含了args参数,可以说lazy_sum是将函数sum和参数args一并打包送给了f,这个包叫做闭包

注意:尽管每次传入的同样的参数,但是最后得到的函数是不一样的

>>> f1=lazy_sum(1,6)
>>> f2=lazy_sum(1,6)
>>> f1==f2
False

函数lazy_sum中又定义了函数sum,内部函数sum
使用外部函数lazy_sum的参数和局部变量

  • 这些定义在外层函数中但由内层函数使用的变量
    被称为自由变量
  • 当lazy_sum返回函数sum时,相关参数和变量都保
    存在返回的函数中(闭包)

闭包

闭包遵循的三条规则

  • 必须有内嵌函数(包含在函数内部的函数)
  • 内嵌函数至少使用了外部函数(enclosing function)
    中的一个自由变量
  • 外部函数必须返回内嵌函数

注意:

一般情况下,如果一个函数结束,那么该函数中定
义的局部变量就都会释放。

  • 闭包是一种特殊情况,外层函数在结束时会发现其
  • 定义的局部变量将来会在内层函数中使用,此时外层函数就会把这些自由变量绑定到内层函数。
>>> def make_inc(x):
    def inc(y):
        return x+y
    return inc

>>> inc5=make_inc(5)
>>> inc5(6)
11

闭包的主要作用在于可以封存函数执行的上下文环境。

  • 例如,通过两次调用outer函数形成了两个闭包,这两个闭包具有相互独立的上下文环境(一个闭包中x=5、y=10,另一个闭包中x=50、y=10),且每个闭包可多次调用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读