外部函数能修改闭包内的变量_Python函数式编程,Python闭包
前置内容
为了更容易理解闭包,在说闭包之前,讲一下两个概念:作用域和嵌套函数。
- 作用域
作用域是变量能被访问的范围,定义在函数内的变量是局部变量,局部变量的作用范围只能在函数内部,它不能在函数被外引用。
定义在模块最外层的变量是全局变量,它是全局范围可见的,所以在函数体内部也可以读取到全局变量。
- 嵌套函数 在函数内部,再定义函数,里面的函数称之为嵌套函数
对于嵌套函数,它可以访问到其外层作用域中定义的局部变量,如代码示例中的变量 msg。
局部变量脱离函数作用域是无法被访问,闭包使局部变量脱离函数作用域,能够被引用访问。
什么是闭包
接下来说一下,什么是闭包?
闭包是一类特殊的函数,在一个函数的作用域内定义一个新函数(嵌套函数),且这个函数中的变量使用了外部函数的局部变量,那么这个函数就是一个闭包。
闭包本质是一个函数,记录并保存当前函数执行状态,相关示例如下:
闭包原理
Python 一切皆对象,即函数也是对象,所有函数都有一个 _closure_属性,如果这个函数是一个闭包,那么_closure_属性值是一个元组对象,这个元组包含了闭包中的自由变量。
闭包,一个应用示例
闭包可以根据外部作用域的局部变量值来得到不同的结果,例如我们修改外部变量,闭包根据这个变量展现出不同的功能
以下例子就是根据不同的刷选条件,得到不同得分:
闭包使用注意
在闭包中是不能修改外部作用域的局部变量:
虽然在闭包里给num变量赋值,但其num变量跟外部函数中的变量num是两个独立变量
另一个闭包使用错误:
这段程序的本意是在每次调用闭包函数时都对变量n进行+1的操作,这样是不允许的
代码改进:
最后
接下来会有更加精彩的内容,不想错过的话,可以关注我,第一时间获取更新!
最后,投币收藏转发来一波,我们下期不见不散~
外部函数能修改闭包内的变量_Python函数式编程,Python闭包相关推荐
- 五分钟学会python函数_Python——带你五分钟了解函数式编程与闭包
今天是Python专题的第9篇文章,咱们来聊聊Python的函数式编程与闭包.编程 函数式编程 函数式编程这个概念咱们可能或多或少都据说过,刚据说的时候不明觉厉,以为这是一个很是黑科技的概念.可是实际 ...
- 函数式编程语言python-Python——五分钟理解函数式编程与闭包
今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它 ...
- python 函数式编程包_Python——详解函数式编程与闭包
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听 ...
- 从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则
闭包是很多语言都具备的特性,上篇<从抽象代数漫游函数式编程(1):闭包概念再Java/PHP/JS中的定义> 闭包的特性 闭包有三个特性: 函数嵌套函数 函数内部可以引用外部的参数和变量 ...
- 从λ演算到函数式编程聊闭包(1):闭包概念在Java/PHP/JS中形式
什么是闭包 如果让谷哥找一下"闭包"这个词,会发现网上关于闭包的文章已经不计其数 维基百科上对闭包的解释就很经典: 在计算机科学中,闭包(Closure)是词法闭包(Lexical ...
- python内置高阶函数求导_Python——函数式编程、高阶函数和内置函数,及
Python--函数式编程.高阶函数及内置函数 函数式编程 一.不可变数据:不用变量保存状态不修改变量 二.第一类对象:函数即"变量" 1.函数名可以当做参数传递 2.返回值可以是 ...
- python闭包技巧_案例详析:Python闭包与nonlocal关键字
在廖雪峰的官网上看到一个很有意思题目.关于闭包的,有兴趣的朋友可以看一下, 做一下这个题目,当然需要一点闭包的知识. 下面我简述一下: 利用闭包返回一个计数器函数,每次调用它返回递增整数. # 修改下 ...
- es6 filter函数的用法_Python 函数式编程指北,不只是面向对象哦!超级详细!
Python 函数式编程指北, 不只是面向对象哦 了解在Python中如何使用 lambda, map, filter 和 reduce 函数来转换数据结构 Photo by Markus Spisk ...
- Python——五分钟理解函数式编程与闭包
函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们 ...
最新文章
- 预写式日志(Write-Ahead Logging (WAL))
- 【Python基础】GitHub 星标 8.8w+,Python 小白 100 天学习计划,从新手到大师!
- 卡斯特罗的离去对古巴科技产业的未来有何影响?
- 一个正则表达式酿成的惨案
- AWS专家论道之迁移上云的四个大趋势和七个小趋势
- 毕业季offer怎么拿?收下这份非典型求职面试指南
- python展开列表代码_python列表(list)用法示例代码
- C++ mmap 多进程文件读写
- macOS 12.4beta3 With OpenCore 0.8.1 and Clover and winPE黑苹果镜像
- 【opencv 450 Image Processing】Out-of-focus Deblur Filter失焦去模糊滤镜
- opencv remap matlab,如何使用OpenCV的remap函数?
- 舌尖上的中国第二季整理笔记
- 1010: 求圆的周长和面积 ZZULIOJ
- java半角转全角_JAVA 半角全角相互转换
- 数字音视频知识点汇总(一)
- Win10自带邮件系统绑定腾讯企业邮箱
- python-共现矩阵(共词矩阵)计算
- OS发展史中各操作系统的形成、发展和特点
- 学位论文和论文的区别是什么?
- ping是什么,有什么作用?
热门文章
- 查看Chome浏览器中已保存的密码
- centos 生产 ssh-key
- html不支持ie7,解决IE6/IE7/IE8不支持before,after问题
- 快速入门系列之 Rust 语言 GitChat连接
- C语言给出任意4个数算24点,讨论24点算法。
- 使用jquery图表插件jqplot之折线图
- java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能!太好用了...
- 基于tutk方案的p2p源码_以太坊源码分析--p2p节点发现
- 怎么升级计算机硬盘,研究僧 篇一:记一次老电脑的升级之路
- chown 和chgrp 软链接