鱼C论坛

 找回密码
 立即注册
查看: 1183|回复: 2

[已解决]求解以下代码是的结果是怎么得来的

[复制链接]
发表于 2020-9-2 22:53:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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')怎么直接打印字符串了
最佳答案
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)得出的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 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)得出的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 20:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表