imledger 发表于 2019-1-15 11:30:21

求助:lambda这段怎么实现的呢

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

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


double = make_repeat(2)这段是怎么实现到lambda的呢?

heidern0612 发表于 2019-1-15 12:32:23

double = make_repeat(2)

传入的数字是2,也就是形参n替换传入的实参为2.

make_repeat(2):
   return lambda s: 2s

下面再传入的就是第二个形参s了。

sunrise085 发表于 2019-1-15 15:01:38

这个实际上是个闭包问题。应该是隐函数和闭包掺杂在一起了,所以你搞不懂了。
将隐函数修改为定义函数,可能更好理解。
def make_repeat(n):
    def func(s):
      return s*n
    return func

double = make_repeat(2)
print(double(8))
print(double('FishC'))
print(make_repeat(3)('旺'))
这个实际上是两层函数,make_repeat()函数的返回值是一个函数,即double是一个函数指针,相当于含有一个参数的函数。闭包有两种用法,一种是像你这样,将make_repeat()返回值贴上标签(double),这样直接double(value)进行调用即可;另一种就是直接双重参数调用,就像我添加的最后一行代码那样。

程序的执行结果是:
16
FishCFishC
旺旺旺

imledger 发表于 2019-1-15 20:33:19

sunrise085 发表于 2019-1-15 15:01
这个实际上是个闭包问题。应该是隐函数和闭包掺杂在一起了,所以你搞不懂了。
将隐函数修改为定义函数,可 ...

看来我还需要再多理解理解
页: [1]
查看完整版本: 求助:lambda这段怎么实现的呢