1. 闭包的介绍

我们学过了函数,我们知道当函数调用完,函数内定义的变量都销毁了,但是我们有时候需要保存函数内的这个变量,每次在这个变量的基础上完成一些列的操作,比如: 每次在这个变量的基础上和其它数字进行求和计算,那怎么办呢?

我们就可以通过咱们今天学习的闭包来解决这个需求。

闭包的定义:

在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包

2. 闭包的构成条件

通过闭包的定义,我们可以得知闭包的形成条件:

  1. 在函数嵌套(函数里面再定义函数)的前提下
  2. 内部函数使用了外部函数的变量(还包括外部函数的参数)
  3. 外部函数返回了内部函数

3. 简单闭包的示例代码

# 定义一个外部函数
def func_out(num1):# 定义一个内部函数def func_inner(num2):# 内部函数使用了外部函数的变量(num1)result = num1 + num2print("结果是:", result)# 外部函数返回了内部函数,这里返回的内部函数就是闭包return func_inner# 创建闭包实例
f = func_out(1)
# 执行闭包
f(2)
f(3)

运行结果:

闭包执行结果的说明:

通过上面的输出结果可以看出闭包保存了外部函数内的变量num1,每次执行闭包都是在num1 = 1 基础上进行计算。

4. 闭包的作用

  • 闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。

注意点:

  • 由于闭包引用了外部函数的变量,则外部函数的变量没有及时释放,消耗内存。

5. 小结

  1. 当返回的内部函数使用了外部函数的变量就形成了闭包
  2. 闭包可以对外部函数的变量进行保存
  3. 实现闭包的标准格式:

     # 外部函数def test1(a):b = 10# 内部函数def test2():# 内部函数使用了外部函数的变量或者参数print(a, b)# 返回内部函数, 这里返回的内部函数就是闭包实例return test2

闭包的介绍、构成条件、作用及示例代码相关推荐

  1. python中if else语句_python 中if else 语句的作用及示例代码

    引入:if-else的作用,满足一个条件做什么,否则做什么. if-else语句语法结构 if 判断条件: 要执行的代码 else: 要执行的代码 判断条件:一般为关系表达式或bool类型的值 执行过 ...

  2. python if else语句例子,python 中if else 语句的作用及示例代码

    引入:if-else的作用,满足一个条件做什么,否则做什么. if-else语句语法结构 if 判断条件: 要执行的代码 else: 要执行的代码 判断条件:一般为关系表达式或bool类型的值 执行过 ...

  3. java异常判断_Java异常退出条件的判断示例代码

    无论是功能性代码还是算法性代码,程序都是一系列流程的合集 既然是流程就分为:一般流程和异常流程: 一般流程保证了基本功能: 异常流程则是对程序稳定性的保证,不能因为一些非法输入,项目就挂了: 注意,布 ...

  4. 惰性求值 php,详细介绍C#函数式编程的示例代码

    public double MemoryUtilization() { //计算目前内存使用率 var pcInfo = new ComputerInfo(); var usedMem = pcInf ...

  5. Python3.9的69个内置函数(内建函数)介绍,并附简单明了的示例代码

    Python 解释器内置(内建)了很多函数,这篇博文对它们进行逐一介绍,博主觉得有必要给出示例代码的会给出示例代码. 声明:博主(昊虹图像算法)写这篇博文时,用的Python的版本号为3.9.10. ...

  6. 【小程序开发必备】微信小程序常用API全介绍,附示例代码和使用场景

    文章目录 1.网络请求相关API 1.1 wx.request 1.2 wx.uploadFile 1.3 wx.downloadFile 1.4 wx.connectSocket 2.页面跳转相关A ...

  7. Python实现进度条和时间预估的示例代码

    一.前言 在python当中可以用进度条来显示工作的进度,比如for循环的进度或者一些模型训练的进度. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪 ...

  8. 微软一站式示例代码库 8 月新代码示例发布

    微软一站式示例代码库 8 月新代码示例发布. 下载地址: http://1code.codeplex.com/releases/view/71395 你也可以通过 示例代码浏览器 或 示例代码浏览器V ...

  9. All-In-One Code Framework [一站式示例代码库] 【转】

    All-In-One Code Framework [一站式示例代码库] 2010 对一站式示例代码库,对奋战在一站式示例代码库上的每一位工程师来说都是不同寻常的一年. 在我们共同努力和开发社区的支持 ...

最新文章

  1. oracle数据连接出现 login denied 问题
  2. spring框架学习(三)
  3. vSphere vCenter 4.0 安装图解
  4. sql复杂查询语句总结
  5. Spring @Async注解
  6. SSM三大框架整合Springfox(Swagger2)详细解决方案
  7. 写聊天室之前 了解聊天室拓展出来的各种知识点
  8. HashMap的使用方法详解
  9. CodeForces - 222C Reducing Fractions(唯一分解定理)
  10. 数据库原理及应用【三】DBMS+SQL
  11. CV中的经典网络模型
  12. linux 下的前端编程工具,Prepros Linux版(前端开发工具)
  13. 终于在五一之前打了SP3
  14. 谷歌这是要全面退出中国!
  15. 普法Android.mk中的一些宏和Android.bp对应关系
  16. 7 tips for using UIWebView
  17. 【软件测试之项目实战】
  18. java设置铃声_我的Android进阶之旅------gt;Android系统设置默认来电铃声、闹钟铃声、通知铃声...
  19. Office 开发版本号与版本对应关系
  20. 手机便签怎么导出到另一个手机 便签内容一键传输方法

热门文章

  1. 国内首个零信任技术标准发布 腾讯安全牵头编制
  2. 12306系统的秒杀“艺术”:如何抗住100万人同时抢1万张票?
  3. non-local神经网络:通过非局部操作解决深度神经网络核心问题
  4. 免费开源!新学期必收藏的AI学习资源,从课件、工具到源码都齐了
  5. 对标英伟达,依图发布AI芯片“求索”
  6. “AI下乡”:华为和袁隆平一起种海水稻,欲改造1亿亩良田
  7. AI一分钟 | 蔚来赴美IPO,开盘跌破发行价;TensorFlow开源新库TFDV
  8. ICML2018见闻 | 迁移学习、多任务学习领域的进展
  9. 【人工智能工程师】掌握这10个项目,秒杀90%面试者!
  10. 程序员必备网站之一:No Design