鱼C论坛

 找回密码
 立即注册
查看: 2104|回复: 12

[已解决]小白问题

[复制链接]
发表于 2017-8-5 14:43:52 | 显示全部楼层 |阅读模式

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

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

x
def makeActions():
        acts = []
        for i in range(5):
                acts.append(lambda x, i=i: i**x)
        return acts
acts = makeActions()
acts[2](2)
4

这里的acts不是一个列表吗,怎么返回的是一个整数?
最佳答案
2017-8-5 20:55:35
2017-08-05_205134.png
2017-08-05_205342.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-5 14:52:57 | 显示全部楼层
acts是一个列表,但其中的元素都是函数名,相当是闭包。自然要用acts[2](2)的形式来输出结果了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 15:00:34 | 显示全部楼层
冬雪雪冬 发表于 2017-8-5 14:52
acts是一个列表,但其中的元素都是函数名,相当是闭包。自然要用acts[2](2)的形式来输出结果了。

acts后的两个参数分别代表什么呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 15:10:18 | 显示全部楼层
zhoujie13 发表于 2017-8-5 15:00
acts后的两个参数分别代表什么呢

[2]代表列表中的元素,是一个函数名
(2)是函数的参数,返回函数的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 15:20:04 | 显示全部楼层
冬雪雪冬 发表于 2017-8-5 15:10
[2]代表列表中的元素,是一个函数名
(2)是函数的参数,返回函数的值。

(2)这个2应该就是传入x的吧?
[2]是一个函数名我不明白
acts应该是i**x的一个列表,i应该在for循环中就已经给定了的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 15:23:13 | 显示全部楼层
你列表里存的是函数,acts[2]=lambda x, i=2: i**x

acts[2](2)=2**2=4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 15:24:13 | 显示全部楼层
zhoujie13 发表于 2017-8-5 15:20
(2)这个2应该就是传入x的吧?
[2]是一个函数名我不明白
acts应该是i**x的一个列表,i应该在for循环中就 ...

acts就是append加入的内容。
  1. >>> acts[2]
  2. <function makeActions.<locals>.<lambda> at 0x000001B5ACB9B620>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 15:29:00 | 显示全部楼层
冬雪雪冬 发表于 2017-8-5 15:24
acts就是append加入的内容。

我明白了,有没有办法打印出acts[](2),就是[0, 1, 4, 9, 16]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 15:42:59 | 显示全部楼层
zhoujie13 发表于 2017-8-5 15:29
我明白了,有没有办法打印出acts[](2),就是[0, 1, 4, 9, 16]
  1. def makeActions():
  2.         acts = []
  3.         for i in range(5):
  4.                 acts.append(lambda x, i=i: [j**x for j in range(5)])
  5.         return acts
  6. acts = makeActions()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 15:44:04 | 显示全部楼层
其实这种题没太大的意思,都是用了考试的,就是先把人弄糊涂。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 16:26:48 | 显示全部楼层
  1. def makeActions():
  2.         acts = []
  3.         for i in range(5):#这个for循环执行往后acts就变成[lambda x,i=0:0**x,lambda x,i=1:1**x,lambdax x,i=2:2**x...lambda x,i=4:4**x]中间用...省略
  4.                 acts.append(lambda x, i=i: i**x)
  5.         return acts
  6. acts = makeActions()#这个acts等于makeActions()的返回值,即[lambda x,i=0:0**x...lambda x,i=4:4**x]
  7. #所以acts[2](2)相当于获得acts列表的第三个成员,及lambda x,i=2:2**x,同时设定参数x值为2,则返回2**2=4
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 20:55:35 | 显示全部楼层    本楼为最佳答案   
2017-08-05_205134.png
2017-08-05_205342.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-8 11:15:46 | 显示全部楼层
冬雪雪冬 发表于 2017-8-5 15:44
其实这种题没太大的意思,都是用了考试的,就是先把人弄糊涂。

只是在看书的时候搞不懂,想弄懂它
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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