前置内容

为了更容易理解闭包,在说闭包之前,讲一下两个概念:作用域嵌套函数

  • 作用域

作用域是变量能被访问的范围,定义在函数内的变量是局部变量,局部变量的作用范围只能在函数内部,它不能在函数被外引用。

定义在模块最外层的变量是全局变量,它是全局范围可见的,所以在函数体内部也可以读取到全局变量。

  • 嵌套函数 在函数内部,再定义函数,里面的函数称之为嵌套函数

对于嵌套函数,它可以访问到其外层作用域中定义的局部变量,如代码示例中的变量 msg。

局部变量脱离函数作用域是无法被访问,闭包使局部变量脱离函数作用域,能够被引用访问。

什么是闭包

接下来说一下,什么是闭包?

闭包是一类特殊的函数,在一个函数的作用域内定义一个新函数(嵌套函数),且这个函数中的变量使用了外部函数的局部变量,那么这个函数就是一个闭包。

闭包本质是一个函数,记录并保存当前函数执行状态,相关示例如下:

闭包原理

Python 一切皆对象,即函数也是对象,所有函数都有一个 _closure_属性,如果这个函数是一个闭包,那么_closure_属性值是一个元组对象,这个元组包含了闭包中的自由变量。

闭包,一个应用示例

闭包可以根据外部作用域的局部变量值来得到不同的结果,例如我们修改外部变量,闭包根据这个变量展现出不同的功能

以下例子就是根据不同的刷选条件,得到不同得分:

闭包使用注意

在闭包中是不能修改外部作用域的局部变量:

虽然在闭包里给num变量赋值,但其num变量跟外部函数中的变量num是两个独立变量

另一个闭包使用错误

这段程序的本意是在每次调用闭包函数时都对变量n进行+1的操作,这样是不允许的

代码改进:

最后

接下来会有更加精彩的内容,不想错过的话,可以关注我,第一时间获取更新!

最后,投币收藏转发来一波,我们下期不见不散~

外部函数能修改闭包内的变量_Python函数式编程,Python闭包相关推荐

  1. 五分钟学会python函数_Python——带你五分钟了解函数式编程与闭包

    今天是Python专题的第9篇文章,咱们来聊聊Python的函数式编程与闭包.编程 函数式编程 函数式编程这个概念咱们可能或多或少都据说过,刚据说的时候不明觉厉,以为这是一个很是黑科技的概念.可是实际 ...

  2. 函数式编程语言python-Python——五分钟理解函数式编程与闭包

    今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它 ...

  3. python 函数式编程包_Python——详解函数式编程与闭包

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听 ...

  4. 从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则

    闭包是很多语言都具备的特性,上篇<从抽象代数漫游函数式编程(1):闭包概念再Java/PHP/JS中的定义> 闭包的特性 闭包有三个特性: 函数嵌套函数 函数内部可以引用外部的参数和变量 ...

  5. 从λ演算到函数式编程聊闭包(1):闭包概念在Java/PHP/JS中形式

    什么是闭包 如果让谷哥找一下"闭包"这个词,会发现网上关于闭包的文章已经不计其数 维基百科上对闭包的解释就很经典: 在计算机科学中,闭包(Closure)是词法闭包(Lexical ...

  6. python内置高阶函数求导_Python——函数式编程、高阶函数和内置函数,及

    Python--函数式编程.高阶函数及内置函数 函数式编程 一.不可变数据:不用变量保存状态不修改变量 二.第一类对象:函数即"变量" 1.函数名可以当做参数传递 2.返回值可以是 ...

  7. python闭包技巧_案例详析:Python闭包与nonlocal关键字

    在廖雪峰的官网上看到一个很有意思题目.关于闭包的,有兴趣的朋友可以看一下, 做一下这个题目,当然需要一点闭包的知识. 下面我简述一下: 利用闭包返回一个计数器函数,每次调用它返回递增整数. # 修改下 ...

  8. es6 filter函数的用法_Python 函数式编程指北,不只是面向对象哦!超级详细!

    Python 函数式编程指北, 不只是面向对象哦 了解在Python中如何使用 lambda, map, filter 和 reduce 函数来转换数据结构 Photo by Markus Spisk ...

  9. Python——五分钟理解函数式编程与闭包

    函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们 ...

最新文章

  1. 预写式日志(Write-Ahead Logging (WAL))
  2. 【Python基础】GitHub 星标 8.8w+,Python 小白 100 天学习计划,从新手到大师!
  3. 卡斯特罗的离去对古巴科技产业的未来有何影响?
  4. 一个正则表达式酿成的惨案
  5. AWS专家论道之迁移上云的四个大趋势和七个小趋势
  6. 毕业季offer怎么拿?收下这份非典型求职面试指南
  7. python展开列表代码_python列表(list)用法示例代码
  8. C++ mmap 多进程文件读写
  9. macOS 12.4beta3 With OpenCore 0.8.1 and Clover and winPE黑苹果镜像
  10. 【opencv 450 Image Processing】Out-of-focus Deblur Filter失焦去模糊滤镜
  11. opencv remap matlab,如何使用OpenCV的remap函数?
  12. 舌尖上的中国第二季整理笔记
  13. 1010: 求圆的周长和面积 ZZULIOJ
  14. java半角转全角_JAVA 半角全角相互转换
  15. 数字音视频知识点汇总(一)
  16. Win10自带邮件系统绑定腾讯企业邮箱
  17. python-共现矩阵(共词矩阵)计算
  18. OS发展史中各操作系统的形成、发展和特点
  19. 学位论文和论文的区别是什么?
  20. ping是什么,有什么作用?

热门文章

  1. 查看Chome浏览器中已保存的密码
  2. centos 生产 ssh-key
  3. html不支持ie7,解决IE6/IE7/IE8不支持before,after问题
  4. 快速入门系列之 Rust 语言 GitChat连接
  5. C语言给出任意4个数算24点,讨论24点算法。
  6. 使用jquery图表插件jqplot之折线图
  7. java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能!太好用了...
  8. 基于tutk方案的p2p源码_以太坊源码分析--p2p节点发现
  9. 怎么升级计算机硬盘,研究僧 篇一:记一次老电脑的升级之路
  10. chown 和chgrp 软链接