python调用函数返回值函数必须要有返回值吗

Python(14)
从一个例子讲起
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
还是考虑这个问题:对可变参数进行求和
看了上一讲的已经知道,可以使用’*’来表示接受一个tuple参数,代码大概可以这样写:
def calc_sum(*args):
for n in args:
ax = ax + n
但是这有个问题,如果我不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?
解决方法是:将函数作为返回值返回,不返回结果只返回函数
解决方法代码:
def lazy_sum(*args):
def sum():
for n in args:
ax = ax + n
return sum
&& f = lazy_sum(1, 3, 2, 7, 9)
&function sum at 0x&
可以看到,我们返回的只是sum这个函数并没有返回函数计算得到的值
可以这样调用:
此时才是真正的计算出函数值;
我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”
&&& f1 = lazy_sum(1, 3, 5, 7, 9)
&&& f2 = lazy_sum(1, 3, 5, 7, 9)
&&& f1==f2
f1()和f2()的调用结果互不影响;
返回的函数并没有立刻执行,而是直到调用了f()才执行,所以如果你的参数绑定的是循环变量,意味着你的变量值会随着迭代来改变,此时会出现你不想要的结果;
比如下面的例子:
def count():
for i in range(1, 4):
return i*i
fs.append(f)
f1, f2, f3 = count()
理论上应该返回1,4 ,9,但是结果是:
全是9,原因就在于返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为9;
返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:
&&& def count():
for i in range(1, 4):
return j*j
fs.append(f(i))
&&& f1, f2, f3 = count()
同时可以使用lambda函数缩短代码;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:95519次
积分:1726
积分:1726
排名:千里之外
原创:72篇
评论:72条
文章:16篇
阅读:39402
(3)(2)(2)(4)(10)(6)(2)(3)(7)(13)(4)(2)(10)(5)(1)(3)(5)Python进阶之返回函数,有需要的朋友可以参考下。返回函数本文根据慕课网廖学峰老师的视频整理。Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数! 例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:def f():
print 'call f()...'
# 定义函数g:
def g():print 'call g()...'
# 返回函数g:
return g仔细观察上面的函数定义,我们在函数 f 内部又定义了一个函数 g。由于函数 g 也是一个对象,函数名 g 就是指向函数 g 的变量,所以,最外层函数 f 可以返回变量 g,也就是函数 g 本身。 调用函数 f,我们会得到 f 返回的一个函数:&&& x = f()
# 调用f()call f()...&&& x
# 变量x是f()返回的函数:&function g at 0x&&&& x()
# x指向函数,因此可以调用call g()...
# 调用x()就是执行g()函数定义的代码请注意区分返回函数和返回值:def myabs():
return abs
# 返回函数def myabs2(x):
return abs(x)
# 返回函数调用的结果,返回值是一个数值返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:def calc_sum(lst):
return sum(lst)调用calc_sum()函数时,将立刻计算并得到结果:&&& calc_sum([1, 2, 3, 4])10但是,如果返回一个函数,就可以“延迟计算”:def calc_sum(lst):
def lazy_sum():return sum(lst)
return lazy_sum调用calc_sum()并没有计算出结果,而是返回函数:&&& f = calc_sum([1, 2, 3, 4])&&& f&function lazy_sum at 0x1037bfaa0&对返回的函数进行调用时,才计算出结果:&&& f()10由于可以返回函数,我们在后续代码里就可以决定到底要不要调用该函数。练习请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。代码:def calc_prod(lst):
def lazy_prob():def f(x,y):return x*yreturn reduce(f,lst,1)
return lazy_probf = calc_prod([1, 2, 3, 4])print f()
版权声明:本文为博主原创文章,未经博主允许不得转载。
最新教程周点击榜
微信扫一扫推荐这篇日记的豆列
······新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
python中函数的返回值怎么调用那
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
稍有积蓄, 积分 237, 距离下一级还需 263 积分
论坛徽章:2
def num1(n):
& & return n*2
def num2(n):
& & q = num1(n)
& & return q*n复制代码是否说的这个?
巨富豪门, 积分 25061, 距离下一级还需 14939 积分
论坛徽章:69
& & 举个栗子& &
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
print 和 return的区别,以及一个函数的返回值怎么传给其他函数使用
富足长乐, 积分 6878, 距离下一级还需 1122 积分
论坛徽章:4
def double(n)
& & return n*2
print(double(12)) #24复制代码同学,你应该先看完教程
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
看了没明白,问下return的值是不是可以直接被python的其他函数引用
稍有积蓄, 积分 237, 距离下一级还需 263 积分
论坛徽章:2
可以,直接用或者赋值再调用
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
嗯,谢谢哥们,我也在弄那,我的qq:
白手起家, 积分 18, 距离下一级还需 182 积分
论坛徽章:0
& & print 就是到标准输出吧。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处为什么我的函数不返回结果……_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:130,293贴子:
为什么我的函数不返回结果……收藏
运行定义好的函数,可是不返回结果可能的唯一原因就是出现了死循环吧但是经过检查我认为我的函数是不会出现死循环的……详细说明:这个函数是处理读取并按一定格式print处理后的文件的,我试过几个内容比较少的文件都成功了,可是老师给的测试文件(内容很多)却无法输出(上述问题)求帮助
300python普及课程群,让你轻松实现此问题,从此不必再发贴苦求无果!欢迎入群听课,授课方式现场直播形式的,QQ语音+及时消息实例讲解+带注释的群共享备课教材文件  不限期,跨年度!  竭诚为你讲解!  详询O、O、一九一五零一零零零
你的代码很值钱吗?医生看病听听症状就能给你开药了。。。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 python调用函数返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信