鱼C论坛

 找回密码
 立即注册
查看: 60|回复: 2

[迷途问路] 代码求解

[复制链接]
最佳答案
0 
发表于 2018-10-9 22:22:15 | 显示全部楼层 |阅读模式
1鱼币
def make_repeat(n):
        return lambda s : s * n

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

double这里只给n这个参数,不会报错吗?还有麻烦大神解释一下整个代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2018-10-9 23:40:30 | 显示全部楼层
double括号中的参数是s的参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
55 
发表于 2018-10-10 10:58:08 | 显示全部楼层
解释一下把,这个算是个高级函数
因为他有返回值,并且返回值是个函数
粗略的看这个函数其实可以写成这样的形式
def make_repeat(n):
     def f(s):
         s = s*n
         return s
     return f
现在应该好理解了     lambda xxx  等价于 函数f(n)     不过更方便,也比较帅
然后来看make_repeat这个函数        这个函数呢,就是接受一个n值,然后把n值传给f(n),又把f(n)返回值返回出去,类似于一个包装,你看不见f(n),只能看到make_repeat()但这个函数实际上不干事的,就是转一下数据,这样的函数称为高级函数
现在来看语句
double = make_repeat(2)
这个2传给了谁呢,实际上这个2传给了,make_repeat
但是呢,make_repeat这个函数并没有拿着这个数值直接干事,而是给你返回了一个函数f 的内存地址
然后你实际上      double(8)   等价于啥     f(8)     n早就传了进去
只有当你调用的时候才用到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-10-21 14:39

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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