gpt4 book ai didi

python - 笨拙的 lambda 函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:36 25 4
gpt4 key购买 nike

我无法找出 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())

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

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

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

for f in functions:
print(f())

现在,这将打印 333,因为 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)

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

关于python - 笨拙的 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com