吴下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 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备