我无法找出 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
。
我是一名优秀的程序员,十分优秀!