好吃的小笼包 发表于 2020-7-5 16:57:41

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:04:54

本帖最后由 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 返回的是个函数哈


边城下雨天 发表于 2020-7-5 17:11:45

函数make_repeat中会返回一个匿名函数f(s) = s * n,因此make_repeat(2)赋值给double是f(s) = s * 2,double实际上调用的是匿名函数
页: [1]
查看完整版本: lambda表达式