qin_yin 发表于 2020-9-2 22:53:28

求解以下代码是的结果是怎么得来的

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')怎么直接打印字符串了

sunrise085 发表于 2020-9-2 23:28:20

前面三行都理解,
这句话心虚么?若真名是前三行都理解,那就不会有这个帖子中的问题了

你不理解的其实是第二行,这是个匿名函数,写成具体的函数如下
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

heidern0612 发表于 2020-9-3 07:58:48

这道题其实是个普通函数嵌套个匿名函数。

调用的话根据函数设置,需要传两个参数进去,一个是普通函数的n,一个是里面的嵌套函数s。

doube变量赋值普通函数的n值为2,double再接着调用函数赋值匿名函数s值为8,所以结果为16..

下面的fishc同理。

第一个double传n值为2没啥好说的,返回值为 labmbda s: 2*s.

返回值如何获得?只有调用,也就是说,相当于调用了make_repeat(2)(8)得出的结果。
页: [1]
查看完整版本: 求解以下代码是的结果是怎么得来的