代码求解
def make_repeat(n):return lambda s : s * n
double = make_repeat(2)
print(double(8))
print(double('FishC'))
double这里只给n这个参数,不会报错吗?还有麻烦大神解释一下整个代码 double括号中的参数是s的参数 解释一下把,这个算是个高级函数
因为他有返回值,并且返回值是个函数
粗略的看这个函数其实可以写成这样的形式
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]