专栏首页飞总聊IT说说Python中闭包是什么?

说说Python中闭包是什么?

问:说说Python中闭包是什么?

答:可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,外函数和内函数。在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

闭包在Python中很常见,只不过你没特别注意这就是一个闭包。比如Python中的装饰器Decorator,假如你需要写一个带参数的装饰器,那么一般都会生成闭包。

下面先用伪代码进行闭包格式的描述:

def 外层函数(参数):
    def 内层函数():
        print("内层函数执行", 参数)

    return 内层函数

内层函数的引用 = 外层函数("传入参数")
内层函数的引用()

再来个闭包最简单的例子,方便大家理解:

#闭包函数的实例
# outer是外部函数
def outer( a ):
    # inner是内函数
    def inner( b ):
        #在内函数中 用到了外函数的临时变量
        print(a+b)
    # 外函数的返回值是内函数的引用
    return inner
ret = outer(5) #ret = inner
ret(10) #15 ret 存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数

上面ret(10),运行结果是15,你看懂了吗?在这个案例中,外函数outer有接收参数 a=5,内函数inner接收参数b=10,在内函数体中计算了a+b 即 5+10的值作为返回值,外函数返回内函数的引用,这里引用指的是内函数inner在内存中的起始地址,最终调用内函数inner()得到返回值15。

本文分享自微信公众号 - 飞总聊IT(feiitworld)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高中生也能看懂的 “ 梯度下降 ” 算法 (线性回归篇)

    既然你诚心诚意地想知道 “ 梯度下降 ” 的算法到底是什么样的,相信你应该也了解到了:“线性回归” 是 “梯度下降” 的基础。

    用户1564362
  • 总结100个Pandas中序列的实用函数

    在分享《Pandas模块,我觉得掌握这些就够用了!》后有很多读者朋友给我私信,希望分享一篇关于Pandas模块中序列的各种常有函数的使用。经过一段时间的整理,本...

    用户1564362
  • 阿里Blink开源,会不会是Flink分崩离析的开始?

    今天刷朋友圈,首先看到的是AI前线的这篇文章:重磅!阿里Blink正式开源,重要优化点解读。这篇文章开篇大概是这样的:

    用户1564362
  • Windows客户端C/C++编程规范“建议”——函数

    等级:【要求】 说明:每个函数的代码行数控制应该控制在80行以内。如果超过这个限制函数内部逻辑一般可以拆分。如果试图超过这个标准,请列出理由。但理由不包含如下...

    方亮
  • PHP数字函数

    白胡杨同学
  • Go 语言基础入门教程 —— 函数篇:函数的基本定义和调用

    几乎所有编程语言都支持函数,编写函数的目的在于将复杂的问题分解为一系列简单的任务来处理,此外同一个函数还可以被多次复用,这一结构在面向过程的函数式编程中至关重要...

    学院君
  • 即学即用系列一:纯函数

    最近一直在思考如何通过文章或者培训快速提升团队的编码能力,总结下来其实技术的学习分为两类:一种是系统性的学习,比如学习一门语言,学习一个开发框架,这更需要自己从...

    司想君
  • Matlab系列之那些数学函数(讨论功能已加入)

    本来是打算写关于矩阵的一些东西,但是弄了一半,发现需要的线代知识有点多,直接讲相关的使用,就太直白了,可能根本无法理解是什么意思,如果讲线代的知识,就感觉和该系...

    狂人V
  • 程序员的函数

    在对函数求导数或者微分的过程中,如果能够知道原函数的图像,对照图像去理解各点的导数、微分、梯度等概念,比纯粹靠函数式理解要直观得多。

    叶锦鲤
  • 机器学习中的数学:为什么对数如此重要

    当然,如果你是一个忙碌的人,没有时间去健身房,把楼梯当作是有氧运动的简易版,那么走楼梯会更好。但是除此之外,你更可能选择乘电梯。

    deephub

扫码关注云+社区

领取腾讯云代金券