Python 使用 lambda 将 while 值传递给函数

Python pass while value to function using lambda

提问人:Adrian 提问时间:5/12/2023 最后编辑:Ben the CoderAdrian 更新时间:5/15/2023 访问量:23

问:

我正在尝试将 while 值传递给函数,这样我就不必编写大量代码。

IamInfo 是一个信息数组 例: 0: JobNo : JobCode : 项目列表(同样是可变长度)

我的代码:


q=0
while q < len(IamInfo):
  Left.insert(INSERT,IamInfo[q][2]+"\n")
  Left.bind("<Button-1>", lambda event, arg=q: displayMore(arg))
  q += 1

我需要传递 q 值,因为我将其用作在另一个 tkinter 帧中显示最后一列信息的键。 IamInfo 的长度可以从 2 个项目更改为 20 个项目,因此我需要能够将其用于许多不同数量的项目。在此处输入图像描述

被调用函数

def displayMore(key):
  print (key)                  <--- so I can see what is passed only
  DisLoop = len(IamInfo[key])
  disx = 4                     <--- defines array element to display
  while disx < DisLoop:
    disText = str(IamInfo[key][disx])+"\n"
    Right.insert(INSERT, disText)
    disx += 1

使用上面的代码,它只传递所有链接的最后一个 q 值。 我尝试了几种不同的方法,但要么失败,要么只是传递了最后一个 q 值。

任何帮助都会很棒。

函数 lambda 参数传递

评论


答:

0赞 Adrian 5/15/2023 #1

因此,我通过更改函数的调用方式解决了这个问题。

而不是:

Left.insert(INSERT,IamInfo[q][2]+"\n")
  Left.bind("<Button-1>", lambda event, arg=q: displayMore(arg))

我用了:

but=Button(Left,width=25,text=IamInfo[q][1],command= partial(displayMore,key=q)).pack()

这在创建时传递循环值时调用函数。