Skip to main content
 首页 » 编程设计

python之笨拙的 lambda 函数

2025年05月04日27duanxz

我无法找出 key=key 在这个简单的 python 代码中做了什么:

for key in dict: 
    f = (lambda key=key: print(key)) 
    print(f()) 

请您参考如下方法:

在这段代码中,key=key 没有任何用处。您也可以将循环编写为

for key in [1,2,3]: 
    f = lambda: key 
    print(f()) 

这将打印1、2 和3。 (请注意——与问题无关——我还从 lambda 中删除了 print,而不是直接返回值,因为它是多余的,只会使“外部"print 打印 None,因为这是函数将返回的内容 print。)

但是,如果您不是在循环内执行函数,而是在循环之后执行怎么办?

functions = [] 
for key in [1,2,3]: 
    f = lambda: key 
    functions.append(f) 
 
for f in functions: 
    print(f()) 

现在,这将打印 3、3 和 3,因为 key 变量在该函数被调用,而不是在它被定义时被调用,即在循环之后它的值为3。这可能会导致一些严重的意外,例如什么时候defining callback functions for different buttons in a loop .

在这里,使用 key=key 开始发挥作用:这将创建一个参数 key 并为其分配 key 的当前值定义函数时循环中的变量作为默认值(因此调用函数时不必传递参数)。稍后调用函数时,key 参数的值将在函数范围内保持不变:

functions = [] 
for key in [1,2,3]: 
    f = lambda key=key: key 
    functions.append(f) 

这会像预期的那样打印 1、2 和 3。正如其他人所指出的,您可以为参数使用不同的名称,以减少混淆,例如f = lambda param=key: param。