Python 中的列表推导式和 lambda

uzu*_*aki 3 python lambda list-comprehension python-3.x

我想创建一个 lambda 列表,但它并没有像我希望的那样成功。

L = [(lambda x: x/y) for y in range(10)]
Run Code Online (Sandbox Code Playgroud)

我希望列表中的每个函数都将其参数除以其索引,但所有函数仅除以最后一个索引。

>>> L[1](5)
0.5555555555555556
>>> L[5](5)
0.5555555555555556
>>> 5/9
0.5555555555555556
Run Code Online (Sandbox Code Playgroud)

y在 Python 中,每个 lambda 都有自己的 possible 副本,这是这种列表理解吗?

kin*_*all 7

lambday中的 指的是y其来源范围内的最后一个值,即 9。

获得所需行为的最简单方法是在 lambda 中使用默认参数:

lambda x, y=y: x/y
Run Code Online (Sandbox Code Playgroud)

y这捕获了定义 lambda 函数时的值。

您还可以执行“双 lambda”,调用返回所需 lambda 的函数,并传入所需的值y

(lambda y: lambda x: x/y)(y)
Run Code Online (Sandbox Code Playgroud)

在这里,每次调用外部 lambda 时都会提供一个新的作用域。