Python 我不知道';当我使用GUI按钮命令时,我不知道为什么只有lambda函数可以运行 def btn\u单击(btn): 全局表达式 表达式=表达式+str(btn) btn_input.set(表达式) btn_7=按钮(根,文本=7',宽度=5,高度=2,命令=lambda:btn_单击(7)) #btn_7=按钮(根,文本=7',宽度=5,高度=2,命令=btn_单击(7))
那么我可以知道这段代码的原因和原理吗?当您需要将函数及其参数同时传递给只需要函数的对象时,这是很常见的 在第二个示例中,Python 我不知道';当我使用GUI按钮命令时,我不知道为什么只有lambda函数可以运行 def btn\u单击(btn): 全局表达式 表达式=表达式+str(btn) btn_input.set(表达式) btn_7=按钮(根,文本=7',宽度=5,高度=2,命令=lambda:btn_单击(7)) #btn_7=按钮(根,文本=7',宽度=5,高度=2,命令=btn_单击(7)),python,function,button,tkinter,lambda,Python,Function,Button,Tkinter,Lambda,那么我可以知道这段代码的原因和原理吗?当您需要将函数及其参数同时传递给只需要函数的对象时,这是很常见的 在第二个示例中,command=btn\u click(7)将调用btn\u click(7),并将结果传递给command,该命令的名称是要获取一个可调用的(函数) 如果将函数调用封装在lambda中,那么您将传递一个未命名的可调用到命令,当调用该命令时,该命令将计算btn\u click(7)当您需要将函数及其参数传递给只需要函数的对象时,这是很常见的 在第二个示例中,command=bt
command=btn\u click(7)
将调用btn\u click(7)
,并将结果传递给command
,该命令的名称是要获取一个可调用的(函数)
如果将函数调用封装在lambda中,那么您将传递一个未命名的可调用到
命令
,当调用该命令时,该命令将计算btn\u click(7)
当您需要将函数及其参数传递给只需要函数的对象时,这是很常见的
在第二个示例中,command=btn\u click(7)
将调用btn\u click(7)
,并将结果传递给command
,该命令的名称是要获取一个可调用的(函数)
如果将函数调用封装在lambda中,则传递一个未命名的可调用到
命令
,该命令在调用时计算btn\u单击(7)
您可以通过此“command”参数运行普通函数,但这里的要点是您将无法向函数传递参数
def func():
打印('单击')
按钮=按钮(根,文本=7',宽度=5,高度=2,命令=func)
#如果运行此命令并单击按钮,您将在控制台中看到“单击”消息
但假设您需要将参数传递给函数,例如单击的按钮数。在这种情况下,需要使用lambda函数
def func(num):
打印(个)
按钮=按钮(根,文本='7',宽度=5,高度=2,命令=lambda:func(7))
当您这样做时,会发生以下情况:
单击按钮时,TKinter调用此lambda函数,然后lambda函数调用带有参数“7”的func()您可以通过此“command”参数运行普通函数,但这里的要点是您无法将参数传递给函数
def func():
打印('单击')
按钮=按钮(根,文本=7',宽度=5,高度=2,命令=func)
#如果运行此命令并单击按钮,您将在控制台中看到“单击”消息
但假设您需要将参数传递给函数,例如单击的按钮数。在这种情况下,需要使用lambda函数
def func(num):
打印(个)
按钮=按钮(根,文本='7',宽度=5,高度=2,命令=lambda:func(7))
当您这样做时,会发生以下情况:
单击按钮时,TKinter调用此lambda函数,然后lambda函数使用参数“7”调用func()