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 副本,这是这种列表理解吗?
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 时都会提供一个新的作用域。