lambda函数定义中的预赋值

2024-09-30 01:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,遇到了一个问题,其中一小段代码的目标是用Qt实现菜单:

def setChoice(self,choice=None):
  do something here...

listOfChoices=[choice1,choice2,choice3]

menu=QMenu(self)
  for choice in listOfChoices:
    action=menu.addAction(choice)
    action.triggered.connect(lambda : self.setChoice(choice=choice))

问题是setChoice()函数总是用choice=choice3调用,这是for循环的最后一个选择。如何妥善解决这个问题?在

还有一个可能与直接部分评估相关的问题: 如何将f= lambda x : x+1a=1; f=lambda x: x+a这样的代码保存到内存中? 谢谢你的解释。在

丹尼斯


Tags: lambda代码self目标fordef菜单action
1条回答
网友
1楼 · 发布于 2024-09-30 01:33:26

这是Python for循环的一个麻烦问题:循环变量是在封闭范围内创建的,并为每次迭代重新分配。在

要解决此问题,您需要创建一个新的局部作用域,以便在某个位置“保存”变量:

for choice in listOfChoices:
    def act(choice):
        action=menu.addAction(choice)
        action.triggered.connect(lambda : self.setChoice(choice=choice))
    act(choice)

或者,在你的第二个问题中

^{pr2}$

相关问题 更多 >

    热门问题