python - 插值 lambda 难以理解
问题描述
poly1
并且poly2
都是包含坐标 (x,y) 的列表。
现在这个函数是预先实现的,我觉得很难理解:
def interpolate():
# This function returns a list of tuples (x, y).
return map(lambda a, b: (a[0] + b[0], a[1] + b[1]), poly_1,
[(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)])
但是你能解释一下发生了interpolate
什么吗?
我能从中提取的只是(就 lambdas 而言)
def func_a(a, b):
return (a[0] + b[0], a[1] + b[1])
和
def func_b(p, q):
return (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)
但是所有这些映射都让我感到困惑。
解决方案
map 只是将一个函数应用于一个或多个数组中的每个元素
让我们来看看:
return map(lambda a, b: (a[0] + b[0], a[1] + b[1]), poly_1,
[(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)])
它是一个map
接受 3 个参数的函数:
lambda a, b: (a[0] + b[0], a[1] + b[1])
可以翻译为
def foo(a,b) : return (a[0] + b[0], a[1] + b[1])
您将在接下来的两个列表中应用它
第一个列表 poly_1
第二个清单
[(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)]
:
首先它是一个带有两个参数的元组列表time * x[0], time * x[1]
“x”取自返回的列表map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)
让我们翻译一下:
- map 将 lambda 函数应用于 poly_1 和 poly_2 的每个元素
lambda p, q: (q[0] - p[0], q[1] - p[1])
等于
def foo2(p,q) : return (q[0] - p[0], q[1] - p[1])
推荐阅读
- html - [class]:hover 工作但 [class] 在 CSS 中不工作?
- python - 具有多个 ID 的 VIP 登录/确认(Python)
- python-3.x - 在 Python 3 中使用 Selenium 在 Firefox 中激活/单击浏览器扩展
- reactjs - React/Redux:为什么在使用 isFetching 标志时无法呈现数据?
- r - 计算数据框中值之间的交互比例
- java - 为什么 Java StringLatin1.regionMatchesCI 方法在比较字符时执行 toUpperCase() 而不是 toLowerCase()?
- pine-script - Pine 脚本:无法获取 Ichimoku 引导线的上(或下)值
- python - tf.get_variable 初始化器 Tensorflow
- node.js - 如何使用 pm2 配置文件启动带有参数的 java 应用程序?
- azure-devops - 提前期和周期时间 - 使用 Power BI 数据连接器连接到分析