鱼C论坛

 找回密码
 立即注册
查看: 977|回复: 7

[已解决]课后作业21讲,求助!

[复制链接]
发表于 2018-9-23 10:51:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def make_repeat(n):
        return lambda s : s * n

double = make_repeat(2)
print(double(8))
print(double('FishC'))

会打印:
16
FishCFishC


求助: 为什么double(8) 里面 8 会传给s呢?
最佳答案
2018-9-23 13:30:43
double = make_repeat(2)
double (8)
这个语句相当于
double(8) = make_repeat(2)(8)
其中第一个数2,是赋值外层def函数的自变量n
第二个数8,是赋值内嵌函数即lambda s这个函数的自变量s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-23 10:53:32 | 显示全部楼层
double=make_repeat(2)
double就等于lambda s:2*s
传入的参数就是s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 10:57:17 | 显示全部楼层
你定义的make_repeat函数的返回值也是一个函数,double = make_repeat(2)相当于在函数中给n绑定了参数2的函数,double是一个函数,函数传入参数不是天经地义的事情嘛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-23 11:36:57 | 显示全部楼层
塔利班 发表于 2018-9-23 10:53
double=make_repeat(2)
double就等于lambda s:2*s
传入的参数就是s

你说的这个我可以推测出来,只是这样直接给予赋值的方法以前从来没有见过。默认传到s,还有什么类似案例可以再学习吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-23 11:39:35 | 显示全部楼层
moc 发表于 2018-9-23 10:57
你定义的make_repeat函数的返回值也是一个函数,double = make_repeat(2)相当于在函数中给n绑定了参数2的函 ...

double 是一个函数, 这个函数里只有s一个参数,所以8就传入了s函数,这点可以理解.那么想请再问一下,如果存在两个参数的情况怎么办?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 12:18:57 | 显示全部楼层
这就是lambda表达式而已,百度去学习吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 13:30:43 | 显示全部楼层    本楼为最佳答案   
double = make_repeat(2)
double (8)
这个语句相当于
double(8) = make_repeat(2)(8)
其中第一个数2,是赋值外层def函数的自变量n
第二个数8,是赋值内嵌函数即lambda s这个函数的自变量s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-25 18:46:03 | 显示全部楼层
Cran1997 发表于 2018-9-23 13:30
double = make_repeat(2)
double (8)
这个语句相当于

谢谢你!  给你设个最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表