[英]Interpolation lambda hard to understand
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
會發生什么嗎?
我能從中提取的是(就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個參數:
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]) 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)
讓我們翻譯一下:
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.