kaiwensbh 发表于 2018-10-9 22:22:15

代码求解

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

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

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

Safoozer 发表于 2018-10-9 23:40:30

double括号中的参数是s的参数

RIXO 发表于 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早就传了进去
只有当你调用的时候才用到
页: [1]
查看完整版本: 代码求解