1.啰嗦一下

学这个知识点的时候,我本来想先了解下定义, 知道个大概再说, 翻了几篇博客,基本上都是有例子带着进入理解这块。即使读了定义,思想还是不能显出个框架。 想吃快餐,有些行,有些就不可以(这里仅代表我自己)。

有个词叫格物致知,《现代汉语词典》2012年发行的第六版将“格物致知”解释为:“推究事物的原理,从而获得知识。”

以后学习着急的时候就用这个词 “格物致知” 来先放慢脚步。

2.定义

字面的定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)

3.举个栗子,再解释一下

看例子

函数可以作为另一个函数的参数或返回值,可以赋给一个变量。函数可 以嵌套定义,即在一个函数内部可以定义另一个函数,有了嵌套函数这种结构,便会产生闭包问题。

内嵌函数inF(),引用了外层函数的变量sum,

当我们用不同参数调用outF()是,得到的结果是隔离的

也就是说每次调用outF()函数后都将生成并保存一个新的局部变量sum。其实这里outF()函数返回的就是闭包。

在函数式语言中,当内嵌函数体内引用到体外的变量时,将会把定义时涉及到的引用环境和函数体打包成一个整体(闭包)返回。

现在给出引用环境的定义就 容易理解了:引用环境是指在程序执行中的某个点所有处于活跃状态的约束(一个变量的名字和其所代表的对象之间的联系)所组成的集合。闭包的使用和正常的函 数调用没有区别。

4.再举个栗子,内嵌函数带参数

这里c返回的就是内嵌函数addy()

c(10)也就是指addy(10),

5.闭包的用途

用途1,当闭包执行完后,仍然能够保持住当前的运行环境。

用途2,闭包可以根据外部作用域的局部变量来得到不同的结果,这有点像一种类似配置功能的作用,我们可以修改外部的变量,闭包根据这个变量展现出不同的功能。

6.总结如何创建一个闭包

在Python中创建一个闭包可以归结为以下三点:

函数内嵌函数;

内嵌函数需要引用上一级namespace中的变量;

外围函数必须返回内嵌函数;

通过这三点,就可以创建一个闭包,Python装饰器就是使用了闭包。

参考:

https://www.cnblogs.com/JohnABC/p/4076855.html

https://www.jianshu.com/p/1de5db830a44?utm_campaign

python闭包有什么作用_python 什么是闭包相关推荐

  1. python匿名函数的作用_Python匿名函数 Lambda表达式作用

    在Python这门优美的编程语言中,支持一种有趣的语法格式(表达式),可以让我们在单行内创建一个最小的函数-python lambda匿名函数. 据说是借鉴了Lisp语言中lambda表达式,它可以使 ...

  2. python布尔值的作用_Python基础教程详解布尔变量的作用

    布尔值也叫真值,在Python开发(http://www.maiziedu.com/course/python-px/)中所有的值都被解释为真值,标准的真值为true和false.那么布尔变量在Pyt ...

  3. python 闭包的作用_python中对闭包的理解

    运行环境声明:本人的代码在sublime text 3中写的,可以Ctrl+b运行.python版本是python3.6.如果您直接运行的,请自觉加入if __name__ == '__main__' ...

  4. python 静态方法 类方法 的作用_Python实例方法、类方法、静态方法的区别与作用详解...

    本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...

  5. python logging模块的作用_Python 日志模块logging分析及使用-2

    本文作为Python日志模块的补充,主要介绍日志回滚RotatingFileHandler和TimedRotatingFileHandler的使用,以及其所带来的问题.Logger对象的日志等级是如何 ...

  6. python主函数的作用_python中main函数的用法

    原博文 2020-03-27 20:25 − **什么场景下会有main函数?** 当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行. **ma ...

  7. python正则r的作用_Python正则表达式,这一篇就够了!

    原标题:Python正则表达式,这一篇就够了! 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达 ...

  8. python中get函数作用_python get函数有什么作用?示例解析

    这篇文章之中我们来了解一下关于python字典之中的pythonget函数的相关知识,get函数是什么意思,他有什么作用都将会在接下来的文章之中得到解答. 描述 Python 字典(Dictionar ...

  9. python except用法和作用_Python面试题(部分附带面试标准答案) 建议收藏

    1.请尽可能列举python列表的成员方法,并给出一下列表操作的答案: (1) a=[1, 2, 3, 4, 5], a[::2]=?, a[-2:] = ? (2) 一行代码实现对列表a中的偶数位置 ...

最新文章

  1. Java8 - 接口默认方法
  2. 在OSX上安装Erlang
  3. 老毛子固件插件_原地升值?newifi 3 路由器刷入高恪固件教程
  4. Django中提供的6种缓存方式
  5. 链接SQL Server服务器
  6. mysql ERROR 1045 (28000): Access denied for user解决方法
  7. 为什么使用NoSql及NoSql的优点
  8. js获取checkbox值的方法
  9. Fragment销毁时replace和add两个方法的区别
  10. 第三章 MongoDb Java应用 3.1
  11. Material Design(九)--CoordinatorLayout和App Bar
  12. TZOJ 1545 Hurdles of 110m(01背包dp)
  13. LoRa网关与服务器通信——PROTOCOL
  14. 多任务学习-Multitask Learning概述
  15. uniapp 添加table不显示
  16. 苹果计算机cpu 型号怎么看,苹果电脑型号怎么看_mac电脑怎么看型号-win7之家
  17. VNC实现Windows远程访问Ubuntu 16.04(无需安装第三方桌面)
  18. 30 行代码实现,支付宝蚂蚁森林自动收能量!
  19. 模板 2018-01-27 分解因数 分解质因数
  20. gephi 使用简介汇总

热门文章

  1. Web端测试常用方法
  2. Leetcode题库——17.电话号码的字母组合
  3. java中的multipart_JAVA基础之multipart,urlencoded以及JSON
  4. 合格率计算(只作新手参考)
  5. Android OpenGL ES 学习(五) -- 渐变色
  6. Spring源码之BeanFactory.getBean()
  7. Cppcheck配置及使用
  8. 简历上写精通Nginx/OpenResty详解,Nginx的核心原理应该不过分吧
  9. 钉钉小程序发布流程笔记
  10. java中文乱码 寮犱笁_服务调用参数为中文时出现乱码,如何解决?