【问题标题】:Python, assigning values right way in lambda function [duplicate]Python,在lambda函数中正确赋值[重复]
【发布时间】:2017-03-05 20:41:44
【问题描述】:

我正在尝试制作一个按钮来打印我向他们提供的值。 在我看来,所有按钮都应该在其文本值上打印相同的值。相反,它们都打印“4”。解决这个问题的正确方法是什么?

from tkinter import *

root = Tk()

def printFunc(text):
    print(text)

list=[0,1,2,3,4]

for i in list:

    w = Button(root, text=list[i],command=lambda: printFunc(list[i])).pack()

root.mainloop()

【问题讨论】:

    标签: python lambda tkinter


    【解决方案1】:

    解决方案是在构造 lambda 时提供一个默认值

    from Tkinter import *
    
    
    root = Tk()
    
    def printFunc(text):
        print(text)
    
    lst=[0,1,2,3,4]
    
    for i in lst:
    
        w = Button(root, text=lst[i],command=lambda x=lst[i]: printFunc(x)).pack()
    
    root.mainloop()
    

    【讨论】:

    • 哇,非常感谢您的帮助:D
    【解决方案2】:

    这是一个非常常见的初学者问题,因为您不了解lambda 的工作原理。解决办法是用functools.partial代替lambda。

    from tkinter import *
    from functools import partial
    
    root = Tk()
    
    def printFunc(text):
        print(text)
    
    list=[0,1,2,3,4]
    
    for i in list:
        w = Button(root, text=list[i],command=partial(printFunc, list[i]))
        w.pack()
    
    root.mainloop()
    

    另外,请始终将pack() 换行,这样可以避免另一个非常常见的初学者问题。

    【讨论】:

    • 感谢您的回复!我明白你的意思,下次我会小心的:)
    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 2015-03-21
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多