gpt4 book ai didi

python - Python lambda 捕获语义如何用于函数指针?

转载 作者:行者123 更新时间:2023-11-28 20:02:22 25 4
gpt4 key购买 nike

基本上,在下面的示例中,为什么 f2 中的 lambda 捕获对列表推导循环变量的引用,而 f3 中的那些“捕获”(实际上,他们只是接受一个论点)“我们期望的方式”lambda 捕获工作?

f1 = [lambda x: x, lambda x: x + 1, lambda x: x + 2]
print([f(0) for f in f1])
f2 = [lambda x: f(x) + 1 for f in f1]
print([f(0) for f in f2])
f3 = [(lambda ff: lambda x: ff(x) + 1)(f) for f in f1]
print([f(0) for f in f3])

输出的三行是:

[0, 1, 2]
[3, 3, 3]
[1, 2, 3]

最佳答案

f 在整个列表理解中是同一个变量。一个更简单的例子:

>>> fs = [lambda: x for x in [1, 2]]
>>> fs[0]()
2

在没有额外的 lambda 包装器的情况下解决这个问题的一个常见技巧是使用默认值(因为默认值是在函数运行时计算的),但这可能会让那些不熟悉该习惯用法的人感到困惑,您通常应该将其拆分为而是一个新函数。

>>> fs = [lambda x=x: x for x in [1, 2]]
>>> fs[0]()
1

关于python - Python lambda 捕获语义如何用于函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46478225/

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