代码之家  ›  专栏  ›  技术社区  ›  Miriam

如何使python循环记住每个值?[副本]

  •  1
  • Miriam  · 技术社区  · 8 年前

    这个问题已经有了答案:

    每当我通过循环在tkinter中动态创建按钮时,调用一个通过循环为其分配值的函数,如下所示:

    from tkinter import *
    root=Tk()
    def add(text):
        print(text)
    for i in ('a', 'b', 'c'):
        Button(root, text=i, command=lambda:add(i)).pack()
    mainloop()
    

    我总是有这样一个问题:函数是用 循环中的最后一个值 ,无论我按什么按钮。在这种情况下,它只是打印 c 不管我按什么按钮。我不知道这是不是有问题 lambda 或 tkinter ,或者只是我的编程,但我想知道如何修复它。

    我试过用 copy.copy 我是说, copy.deepcopy (关于 兰姆达 函数和字符串),以及 [:] 和 str (在绳子上)。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Dietrich Epp    8 年前

    有一个常见的技巧:

    for i in ...:
        def command(i=i):
            add(i)
        Button(..., command=command)
    

    它看起来有点难看,但是它捕捉到了 i 在默认参数值中。有其他方法可以解决这个问题,但这个解决方案相当简洁。