Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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()