万仞飞霜 发表于 2020-6-28 21:16:25

第021次课后作业

这个double(8)的8为什么代表s呀?还有double为啥后边没括号,有点不理解

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

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

liuzhengyuan 发表于 2020-6-28 21:18:33

make_repeat(2) 中的 2 应该是代表 n
然后之后 8 是代表 s
并返回 S* n 的值

万仞飞霜 发表于 2020-6-28 21:24:01

liuzhengyuan 发表于 2020-6-28 21:18
make_repeat(2) 中的 2 应该是代表 n
然后之后 8 是代表 s
并返回 S* n 的值

主要是这一步不理解,double括号里面的数为啥代表s
double = make_repeat(2)

Twilight6 发表于 2020-6-28 21:24:24

本帖最后由 Twilight6 于 2020-6-28 21:25 编辑




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

可以看成:

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

只不过 lambda 是匿名函数 没有函数名 所以这里 func 是我添加上去的,则你假如 这样调用 double = make_repeat(2)

那么就可以看成(实际上不能这样写哈只是给你演示的):
def make_repeat(2):
    def func(s):
      return s * 2
    return func
因为 make_repeat 函数返回的是 func 这个函数 则这个时候 double = make_repeat(2) 就等价于 double = func

然后你再次调用 double(8) 相当于 func(8)则此时函数是这样的 :
def func(8):
    return 8 * 2

所以返回的 16

而 FishC 也是 同理 只不过FishC * 2 是等于把字符串重复两遍后拼接


liuzhengyuan 发表于 2020-6-28 21:25:33

万仞飞霜 发表于 2020-6-28 21:24
主要是这一步不理解,double括号里面的数为啥代表s
double = make_repeat(2)

看楼上的的吧 ↑
解释的很好

万仞飞霜 发表于 2020-6-28 21:28:45

liuzhengyuan 发表于 2020-6-28 21:25
看楼上的的吧 ↑
解释的很好

都是大神
页: [1]
查看完整版本: 第021次课后作业