Python 很难理解

Python 很难理解,python,lambda,geometry,interpolation,Python,Lambda,Geometry,Interpolation,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,

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而言)


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

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)])
它是一个带有3个参数的
map
函数:

  • lambda,b:(a[0]+b[0],a[1]+b[1])
    可以翻译为
  • def foo(a,b):返回(a[0]+b[0],a[1]+b[1])

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

  • 第一个列表poly_1

  • map(lambda p,q:(q[0]-p[0],q[1]-p[1]),poly_1,poly_2)中x的第二个列表
    [(时间*x[0],时间*x[1])

  • 首先,它是一个包含两个参数的元组列表
    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):返回(q[0]-p[0],q[1]-p[1])

    侧注:

    def interpolate(poly_1, poly_2):
        return map(lambda p, q: (p[0] + t*(q[0]-p[0]), p[1] + t*(q[1]-p[1])), poly_1, poly_2)
    

    做同样的工作。如果你查找
    map()
    lambda
    你可以试着用几个较长的形式写出来
    def
    函数,它正在对两个坐标列表进行计算。@Chris\u Rands你能这样做吗?是我还是三个贴图/循环可以简化为一个?(也很困惑)你能重新格式化吗,我觉得格式有点不对劲。
    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)])
    
    def interpolate(poly_1, poly_2):
        return map(lambda p, q: (p[0] + t*(q[0]-p[0]), p[1] + t*(q[1]-p[1])), poly_1, poly_2)