吴下X小阿蒙 2020-04-12 21:32 采纳率: 0%
浏览 357
已采纳

python 中,将lambda函数放进列表,指定访问和循环访问不一样。

我在python 中,将lambda函数放进列表,指定访问和循环访问不一样,求教各位大佬这么为什么,我如果想直接访问,该怎么处理。(指定都是输出1, 循环却正常输出)

代码:

cons = []
for i in range(5):
    temp = {'fun': lambda x: x - i}
    cons.append(temp)

    print(i, temp['fun'](5), cons[i]['fun'](5))
    #print(cons)
print('+' * 30)

print(cons[0]['fun'](5))
print(cons[1]['fun'](5))
print(cons[2]['fun'](5))
print(cons[3]['fun'](5))
print(cons[4]['fun'](5))
print('+' * 30)

for i in range(5):
    print(cons[i]['fun'](5))

输出:

0 5 5
1 4 4
2 3 3
3 2 2
4 1 1
++++++++++++++++++++++++++++++
1
1
1
1
1
++++++++++++++++++++++++++++++
5
4
3
2
1
  • 写回答

2条回答 默认 最新

  • tcy23456 2020-04-12 23:13
    关注

    你lambda中运用啦外部变量i;当你运行完成时i=4;而传入参数x=5; 5-4=1没有什么奇怪的。
    cons = []
    for i in range(5):
    temp = {'fun': lambda x: x - i}
    cons.append(temp)

    print(i, temp['fun'](5), cons[i]['fun'](5))
    #print(cons)
    

    print('+' * 30)

    print(cons[0]'fun')
    print(cons[1]'fun')
    print(cons[2]'fun')
    print(cons[3]'fun')
    print(cons[4]'fun')
    print('+' * 30)

    for i in range(5):
    print(cons[i]'fun')

    0 5 5
    1 4 4
    2 3 3
    3 2 2
    4 1 1
    ++++++++++++++++++++++++++++++
    1
    1
    1
    1
    1
    ++++++++++++++++++++++++++++++
    5
    4
    3
    2
    1

    i
    Out[21]: 4
    明白不

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)