默.默 发表于 2015-7-27 11:00:44

请目测以下表达式会打印出什么?

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

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

为什么会打印出:
16
FishCFishC

xiongjingkui 发表于 2015-7-27 11:27:43

首先你的n是2 ,其次你在double函数里面自定义了一个s*n的函数,也就是嵌套了一个子函数,现在double()就是调用的这个自定义的函数

默.默 发表于 2015-7-27 13:26:36

xiongjingkui 发表于 2015-7-27 11:27
首先你的n是2 ,其次你在double函数里面自定义了一个s*n的函数,也就是嵌套了一个子函数,现在double()就 ...

那为什么执行double(8)于double(“fishC”)时将实参传给了形参 s
而不是给形参n
double=make_repeat(2)
这句应该怎么理解呢?
{:9_228:}

xiongjingkui 发表于 2015-7-27 15:14:04

默.默 发表于 2015-7-27 13:26
那为什么执行double(8)于double(“fishC”)时将实参传给了形参 s
而不是给形参n
double=make_repea ...

那句就是已经将2传给了n,就是相当于这样:double(8)=make_repeat(2)(8),这种嵌套的赋值先赋给外层函数,再赋给里层函数

默.默 发表于 2015-7-27 15:45:58

xiongjingkui 发表于 2015-7-27 15:14
那句就是已经将2传给了n,就是相当于这样:double(8)=make_repeat(2)(8),这种嵌套的赋值先赋给外层函数 ...

理解了,谢谢你哦{:9_228:}

xiongjingkui 发表于 2015-7-27 15:47:25

默.默 发表于 2015-7-27 15:45
理解了,谢谢你哦

不客气,互相帮助{:9_240:}

戴宇轩 发表于 2015-7-27 16:51:47

lambdas: s * 2相当于def func(s):
    return s * 2不过这个函数没有名字(也不叫func)

asdererer 发表于 2016-4-12 21:44:03

戴宇轩 发表于 2015-7-27 16:51
相当于不过这个函数没有名字(也不叫func)

吊~~~瞬间就懂了 谢谢哈

刘望山 发表于 2017-1-19 14:59:47

print(double('FishC'))
FishCFishC还有不太理解。麻烦可以解释一下吗{:10_254:}

Foraltria 发表于 2021-2-22 16:52:46

瞬间理解!
页: [1]
查看完整版本: 请目测以下表达式会打印出什么?