求解以下代码是的结果是怎么得来的
def make_repeat(n):return lambda s : s * n
double = make_repeat(2)
print(double(8))
print(double('FishC'))
结果:
16
FishCFishC
前面三行都理解,不理解double(8)怎么赋值给了lambda s:
double('FishC')怎么直接打印字符串了
前面三行都理解,
这句话心虚么?若真名是前三行都理解,那就不会有这个帖子中的问题了
你不理解的其实是第二行,这是个匿名函数,写成具体的函数如下
def make_repeat(n):
def fun(s):
return s * n
return fun
double = make_repeat(2)
print(double(8))
print(double('FishC'))
make_repeat返回的是一个可执行函数,这就是函数闭包
第6行的参数2就是make_repeat的参数n,double实际上是一个可知性函数,相当于fun函数的别称
所以第7、8行的参数就是传递给fun的参数,即fun函数中的s
这道题其实是个普通函数嵌套个匿名函数。
调用的话根据函数设置,需要传两个参数进去,一个是普通函数的n,一个是里面的嵌套函数s。
doube变量赋值普通函数的n值为2,double再接着调用函数赋值匿名函数s值为8,所以结果为16..
下面的fishc同理。
第一个double传n值为2没啥好说的,返回值为 labmbda s: 2*s.
返回值如何获得?只有调用,也就是说,相当于调用了make_repeat(2)(8)得出的结果。
页:
[1]