簡體   English   中英

插值lambda難以理解

[英]Interpolation lambda hard to understand

poly1poly2都是包含坐標(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會發生什么嗎?

我能從中提取的是(就lambda而言)

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個參數:

  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]) 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]

map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)返回的列表中map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2) “ x” map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)

讓我們翻譯一下:

  1. 映射將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])

邊注:

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)

做同樣的工作。 更快

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM