Python 函数式编程(3) —— 闭包
内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。
举例:希望一次返回3个函数,分别计算1x1,2x2,3x3:
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
print(fs)
return fs
f1, f2, f3 = count()
print(f1(), f2(), f3())
# 结果全部都是 9。原因就是当count()函数返回了3个函数时,这3个函数所引用的变量 i 的值已经变成了3。
# 由于f1、f2、f3并没有被调用,所以,此时他们并未计算 i*i,当 f1 被调用时:9。
# 因此,返回函数不要引用任何循环变量,或者后续会发生变化的变量。
返回闭包不能引用循环变量,请改写count()函数,让它正确返回能计算1x1、2x2、3x3的函数。
def count1():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
result = f(i)
fs.append(result)
print(fs)
return fs
a1, a2, a3 = count1()
print(a1(), a2(), a3())
转载于:https://www.cnblogs.com/zhang-teng/p/6198448.html
Python 函数式编程(3) —— 闭包相关推荐
- 一篇文章解决Python函数式编程与闭包的问题
函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们 ...
- 三分钟理解Python函数式编程与闭包
函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它的含义很朴实,但是延伸出来许多丰富的用法. 在早期编程语言还不是很多的时候,我们 ...
- 五分钟学会python函数_Python——带你五分钟了解函数式编程与闭包
今天是Python专题的第9篇文章,咱们来聊聊Python的函数式编程与闭包.编程 函数式编程 函数式编程这个概念咱们可能或多或少都据说过,刚据说的时候不明觉厉,以为这是一个很是黑科技的概念.可是实际 ...
- python 函数式编程包_Python——详解函数式编程与闭包
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听 ...
- 函数式编程语言python-10分钟学会python函数式编程
原标题:10分钟学会python函数式编程 在这篇文章里,你将学会什么是函数范式以及如何使用Python进行函数式编程.你也将了解列表推导和其它形式的推导. 函数范式 在命令式范式中,通过为计算机提供 ...
- 函数式编程语言python-Python——五分钟理解函数式编程与闭包
今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听说的时候不明觉厉,觉得这是一个非常黑科技的概念.但是实际上它 ...
- python函数式编程读取数据-python学习笔记9:函数式编程
函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...
- python编写函数_浅谈Python 函数式编程
匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...
- Python函数式编程简介(二)返回函数
本文为Python函数式编程的第二部分主要讲解返回函数和闭包 2.返回函数 2.1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常 ...
最新文章
- 用ul和li实现表格table效果 (转)
- 树莓派wiringPi常用的函数介绍
- Python面向对象编程Day 25部分知识点
- 文件及文件组备份与还原示例.sql
- 把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析
- virtualbox macos_MacOS 终于可以完美使用 Podman 了!
- 求平均数、百分率、最大值、最小值、两个字段相差秒数的SQL
- Hive中表名、别名的限制
- mysql学生信息管理系统设计_学生信息管理系统的设计与实现(MyEclipse,MySQL)
- 数据库课程设计实验报告--图书管理系统
- 一文读懂机器学习(转)
- Paper Reading: Re-ranking Person Re-identification with k-reciprocal Encoding
- bzoj3991 [SDOI2015]寻宝游戏 set
- CSS实例——梦幻西游
- 举例在移动HTML5 UI框架有那些
- OpenCV调试利器——Image Watch插件的安装和使用
- python计算圆周率的方法_用python计算圆周率PI
- 看完张一鸣近十年微博,我总结了这些成长特质
- android 11.0 12.0自定义开机向导app
- 恢复参数文件spfile
热门文章
- 【前端 · 面试 】HTTP 总结(四)—— HTTP 状态码
- 初识二进制2:指令系统
- react脚手架_react脚手架create-react-app安装与使用
- java计算两个字符串格式的时间间隔多少天多少小时多少分钟
- C# WinForm 控件美化之改变ListView Head 的背景色
- SSM框架之Spring MVC(一)
- Silverlight 中的通信安全访问策略
- php分页3 1,经典php分页代码与分页原理(1/3)
- SparkMapReduce的区别、多线程多进程的区别
- MySql的语法规范