首页 > 解决方案 > 如何将 lambda 附加到 python 中的列表?

问题描述

我正在尝试创建一个程序来创建格式的 lambda 函数列表y=mx+b,其中 'm' 和 'b' 是预定值

我的总体目标是实现一个功能

基本上,如果您知道那是什么,则类似于Hough 变换。

获得特定图像的线条后,我可以创建一个 lambda 函数来表示线条的斜率及其开始位置。我遇到了无法将 lambda 函数附加到列表的问题。

我试过这个:

if __name__ == "__main__":
  nums = []
  for i in range(10):
    j = lambda x: x + i
    nums.append(j)
  for i in nums:
    print(i(1))

这是我得到的错误:

Traceback (most recent call last):
  File "C:/Users/me/.PyCharmCE2018.3/config/scratches/scratch_3.py", line 7, in <module>
    print(i(1))
  File "C:/Users/me/.PyCharmCE2018.3/config/scratches/scratch_3.py", line 4, in <lambda>
    j = (lambda x: x + i)
TypeError: unsupported operand type(s) for +: 'int' and 'function'

标签: pythonlambdaappend

解决方案


问题是您创建的 lambdas 指的i是活动堆栈帧中的当前值。当您稍后重用i第二个for循环时,它会绑定到列表中的 lambda。当调用 asi(1)时,lambdas 试图评估 lambda1 + i在哪里i,所以你当然会得到一个错误。

可能您想要的是i在创建 lambda 时冻结 的值。您可以通过替换来做到这一点:

j = lambda x: x + i

和:

j = (lambda y: lambda x: x + y)(i)

通过将其绑定到 lambda 变量,然后立即应用该 lambda,这有效地捕获了当前值i,之后绑定保持固定。


推荐阅读