lambda表达式
def make_repeat(n):return lambda s : s * n
double = make_repeat(2)
print(double(8))
print(double('FishC'))
16
FishCFishC
这段代码不是很懂,在double = make_repeat(2)之后是默认n=2了吗?然后print(double(8))就把函数的参数变成了s? 本帖最后由 Twilight6 于 2020-7-5 17:07 编辑
def make_repeat(n):
return lambda s : s * n
可以看成(这里的 func 只是随便取的,因为 lambda 没有函数名这里演示随便拿了个充当函数名哈):
def make_repeat(n):
def func(s):
return s * n
return func
所以当你 :double = make_repeat(2) 时候,即是把 2 传入 make_repeat(2) 函数中,返回了 func ,那么实可以看为(实际上不能这样写哈~为了演示):
def func(s):
return s * 2
然后你再次 double(8) 等价于 func(8) 即:
def func(8):
return 8 * 2
返回 16
第二个同理哈,'FishC'*2 返回 FishCFishC
在double = make_repeat(2)之后是默认n=2了吗?
是的,double 就等价于 上面的 func(s) 这个函数了,又或者是等价于lambda s : s * 2 这个匿名函数
然后print(double(8))就把函数的参数变成了s?
对,这里的 8 就是 s 了 ,因为 return 返回的是个函数哈
函数make_repeat中会返回一个匿名函数f(s) = s * n,因此make_repeat(2)赋值给double是f(s) = s * 2,double实际上调用的是匿名函数
页:
[1]