首页 > 解决方案 > 插值 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)

但是所有这些映射都让我感到困惑。

标签: pythonlambdageometryinterpolation

解决方案


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 个参数的函数:

  1. lambda a, b: (a[0] + b[0], a[1] + b[1])可以翻译为

def foo(a,b) : return (a[0] + b[0], a[1] + b[1])

您将在接下来的两个列表中应用它

  1. 第一个列表 poly_1

  2. 第二个清单[(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)

让我们翻译一下:

  1. map 将 lambda 函数应用于 poly_1 和 poly_2 的每个元素
  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])


推荐阅读