python - 如何将 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'
解决方案
问题是您创建的 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
,之后绑定保持固定。
推荐阅读
- python - Python Pandas 在不同日期和日期范围内重新采样特定时间
- docker-compose - Azure DevOps 上的 Docker Compose 任务无法启动守护进程
- c# - 即使我有正确的范围,我也无权访问 Google Drive 中的 appDAtaFolder (https://www.googleapis.com/auth/drive.appdata) [403]
- javascript - 打字稿对象类型不显示省略分号的错误
- python - argparse 解析器:覆盖选项
- node.js - 如何在 mongodb-memory-server 中设置初始数据?
- reactjs - store.getState 总是返回默认状态
- python - /esacp/profile/ 中的 RelatedObjectDoesNotExist 用户在 Django 中没有配置文件
- android - 某些设备上的 Android 布局太大
- azure - 无法从 Azure VM 中运行的 Windows 服务访问 Azure 文件共享