Python 如何';lamba variable=变量:somefunction()';工作(包括示例)
我正在搜索StackOverflow来解决我的一个问题,突然发现用户提交的解决方案(针对其他人的问题): 调用函数的命令参数需要包装在Python 如何';lamba variable=变量:somefunction()';工作(包括示例),python,python-3.x,lambda,command,Python,Python 3.x,Lambda,Command,我正在搜索StackOverflow来解决我的一个问题,突然发现用户提交的解决方案(针对其他人的问题): 调用函数的命令参数需要包装在lambda中,以防止立即调用它们。此外,在for循环中绑定的命令需要将循环变量作为默认参数,以便每次都绑定正确的值 appsMenu.add_command(label=app, command=lambda app=app: openApp(Apps[app])) 如你所见,用户编写了lambda app=app,出于对我的爱,我不知道为什么。它做什么?l
lambda
中,以防止立即调用它们。此外,在for循环中绑定的命令需要将循环变量作为默认参数,以便每次都绑定正确的值
appsMenu.add_command(label=app, command=lambda app=app: openApp(Apps[app]))
如你所见,用户编写了
lambda app=app
,出于对我的爱,我不知道为什么。它做什么?lambda表达式用于定义单行(匿名)函数。因此,写作
f = lambda x: 2*x
(或多或少)等同于
def f(x):
return 2*x
此外,对于普通函数,在lambda
函数中也可以有默认参数。因此
k = 2
f = lambda x=k: 2*x
可以称为f()
其中x
将是k
的值,即2
或f(3)
其中x=3
。现在,更奇怪的是,由于lambda
函数有自己的名称空间,因此可以将k
与x
交换为
x = 2
f = lambda x=x: 2*x
这意味着如果没有设置其他参数,f()
的默认值将是(外部)x
值(即2
)
因此,表达式
lambda app=app: openApp(Apps[app])
是一个函数(未命名),它接受一个参数app
,其默认值为(外部)变量app
。调用时,它将执行指令openApp(Apps[app])
,其中Apps
是全局(外部)对象
现在,我们为什么要这样做,而不是在调用.add_command()
时编写command=openApp(Apps[app])
?原因是我们不希望在定义命令时(即调用.add_command()
时)执行命令,而是希望在稍后的时间(即选择菜单项时)执行命令
因此,为了推迟执行,我们将openApp(Apps[app])
的执行包装在一个函数中。选择菜单项后,将执行此功能。因此,我们将在那时调用openApp
,而不是现在(在我们想要添加命令的时候),否则情况就是这样
现在,由于调用lambda
函数时没有参数,因此它将使用其默认参数(外部)app
作为(内部)app
。这使得整个参数有点多余,因为外部变量可以在lambda
表达式中直接访问。因此,可以将表达式简化为lambda:openApp(Apps[app])
,也就是说,不带参数,使整行
appsMenu.add_command(label=app, command=lambda: openApp(Apps[app]))
对我来说,这看起来有点简单,这是我编写它的方式,但从概念上讲,这与带有默认参数的代码没有区别。这是答案的副本:。
appsMenu.add_command(label=app, command=lambda: openApp(Apps[app]))