列表元素含有匿名函数的问题

sigtem 2019-01-25 04:39:41
cons=[]
for j in range(0,3):
cons.append({'fun': lambda x: x[j]})
用这个循环语句生成了一个列表,其元素是字典,字典里有一个匿名函数。
现在调用定义好的的cons中的匿名函数
t=[0,1,2,3]
cons[0]['fun'](t)
cons[1]['fun'](t)
cons[2]['fun'](t)
得到的结果都是2,而不是0,1,2,因为此时j仍然被赋予2的值。我必须每次调用匿名函数都事先修改j的值才能调用对应值,很麻烦。
我希望达到的效果是cons=[{'fun':lambda x: x[0]},{'fun':lambda x: x[1]},{'fun':lambda x: x[2]}],这样就固定了。请问有什么办法?谢谢。
...全文
113 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sigtem 2019-02-11
  • 打赏
  • 举报
回复
非常感谢,问题解决了。
ruancan 2019-01-26
  • 打赏
  • 举报
回复
匿名函数也是函数,lambda x: x[j]等价于

def func(x):
return x[j]

而这个j相当于全局变量了,最后这个j变成了2,所以你取出来的全部都是2,所以想要实现你的效果,只能把全局变量修改成局部变量.代码如下:

cons = []
for j in range(0, 4):
cons.append({'fun': lambda x, y=j: x[y]})

t = [0, 1, 2, 3]
for index, num in enumerate(t):
print(cons[index]['fun'](t))

请结贴

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧