为了账号安全,请及时绑定邮箱和手机立即绑定

如何理解lambda中的闭包?

如何理解lambda中的闭包?

三国纷争 2019-09-27 15:54:47
我想在一个循环中制作5个按钮,并为每个按钮绑定一条命令以打印索引。在以下解决方案中,它始终打印相同的索引。我的代码是这样的:for i in range(5):    make_button = Tkinter.Button(frame, text ="make!",                                  command= lambda: makeId(i))def makeId(i):    print(i)它总是打印5.如何解决此问题?
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

执行lambda时,将完成lambdas中变量的解析。此时,对于所有按钮,i = 5。要纠正此问题,请执行以下操作:


 make_button = Tkinter.Button(frame, text ="make!", 

                              command= lambda i=i: makeId(i))

这会将我创建为lambda中的局部变量。此局部变量将从循环中保存i的正确值。局部变量可以具有任何名称,不一定是i,例如command= lambda a=i: makeId(a))。


查看完整回答
反对 回复 2019-09-27
  • 1 回答
  • 0 关注
  • 413 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信