lamda循环_如何在lambda表达式中使用循环变量

我试图使用for循环将多个编号的命令添加到Tkinter菜单.当调用命令时,它的编号应该用作命令函数的参数.以下代码不起作用,因为在调用命令时评估i,即在循环完成之后.这意味着传递给function1的参数始终为15,而我通过传递命令标签上显示的数字.有没有办法实现这个目标?

注意:标签按预期工作,产生16个标记为0到15的选项

newMenu = Menu(menuButtonInstance)

for i in range(16):

newMenu.add_command(label = '%s'%i,

command = lambda:function1(i))

menuButtonInstance.config(menu = newMenu)

提前致谢

解决方法:

一种常用的处理lambda后期绑定的方法是给lambda一个参数,其默认值设置为更改变量:

newMenu.add_command(label='{0}'.format(i),

command=lambda x=i: function1(x))

另一种可能性是使用functools中的partial:

newMenu.add_command(label='{0}'.format(i),

command=partial(function1, i))

(注意,PEP8建议在关键字参数中使用时不要在=的每一边使用空格字符.另一方面,你应该在所有运算符周围加上空格字符,例如你的例子中的%)

标签:python

来源: https://codeday.me/bug/20190626/1289965.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值