Python之返回函数
高阶函数可以把函数作为一个结果值返回
举例说明
普通的求积函数是
vim day5-6.py
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/python # -*- coding:utf-8 -*- def product( * arg): #定义求积函数 a = 1 #初始值 for i in arg: #迭代循环传递的列表 a = a * i return a #返回值 f = product( 1 , 2 , 3 , 4 ) print f |
运行结果24
如果不需要立即运算而是要在以后的程序中有需要的时候在运算,可以不返回结果而是返回函数
vim day5-7.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/python # -*- coding:utf-8 -*- def lazy_product( * arg): def product(): a = 1 for i in arg: a = a * i return a return product f = lazy_product( 1 , 2 , 3 , 4 ) print f |
执行结果
可以看出返回是一个函数体没有执行,并且每次运行返回的值是不一样的即使每次传递的参数是一样的
修改代码最后加一行
print f()
加了()函数才会执行
这种程序结构成为闭包
为了更好理解函数返回的是函数体只有在调用的时候才会执行,在来看一个例子
vim day5-8.py
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/python # -*- coding:utf-8 -*- def count(): fs = [] for i in range ( 1 , 4 ): def f(): return i * i fs.append(f) return fs f1, f2, f3 = count() print f1(),f2(),f3() |
输出会是什么呢
首先来分析函数的执行过程
1,def count():把函数count放入内存
2,f1, f2, f3 = count()调用函数把函数生成的列表分别返回给f1,f2,f3
count函数是执行一个循环并且把循环生成的函数体返回
3,执行f1,f2,f3
有人认为返回应该是1,4,9 其实返回是9,9,9
原因在于函数内引用了变量i但是没有立即执行,知道调用的时候才执行,这个时候i的值已经变为3了
为了更好了看清楚执行过程,修改一下代码,把每一步的执行结果输出
vim day5-9.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/python # -*- coding:utf-8 -*- def count(): fs = [] for i in range ( 1 , 4 ): def f(): return i * i fs.append(f) print fs,i,fs[i - 1 ]() #输出每一次循环时候得到的函数体f,i的值(1,2,3)以及执行这个函数的结果 print fs,i #三次循环结束以后得到的fs列表 return fs #把列表作为函数的返回值,列表内容为函数体 f1,f2,f3 = count() #调用count函数把结果返回给f1,f2,f3 print f1,f2,f3 #查看f1,f2,f3得到的函数体 print f1(),f2(),f3() #执行查看结果 |
执行结果
输出的前面三行的执行三次循环得到的fs以及i的值及i*i的值,第四行是循环结束后得到的fs列表和i的值 第五行是count函数返回的列表fs赋值给f1,f2,f3
第六行是执行的时候输出的结果,因为这个时候i的值已经是3了所以得到的结果是9,9,9
1 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!