求助: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的呢? double = make_repeat(2)
传入的数字是2,也就是形参n替换传入的实参为2.
make_repeat(2):
return lambda s: 2s
下面再传入的就是第二个形参s了。
这个实际上是个闭包问题。应该是隐函数和闭包掺杂在一起了,所以你搞不懂了。
将隐函数修改为定义函数,可能更好理解。
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
旺旺旺
sunrise085 发表于 2019-1-15 15:01
这个实际上是个闭包问题。应该是隐函数和闭包掺杂在一起了,所以你搞不懂了。
将隐函数修改为定义函数,可 ...
看来我还需要再多理解理解
页:
[1]