我很努力地理解下面用python写的'reduce'调用。Python to c#reduce函数理解
我在这里和其他地方发现了几个来源,说明函数做了什么,并且在C#中有一个等效的“聚合”列表,但我无法理解下面的调用实际上是什么-expect- ...可能是因为我无法确定'_keep_left'返回的是什么?
所以:
1 - 任何人可以帮助告诉我什么是 '_keep_left' 回来?
2-什么是, [])
在减少电话中的含义?
非常感谢。
TURN_LEFT, TURN_RIGHT, TURN_NONE = (1, -1, 0)
def turn(p, q, r):
"""Returns -1, 0, 1 if p,q,r forms a right, straight, or left turn."""
return cmp((q[0] - p[0])*(r[1] - p[1]) - (r[0] - p[0])*(q[1] - p[1]), 0)
def _keep_left(hull, r):
while len(hull) > 1 and turn(hull[-2], hull[-1], r) != TURN_LEFT:
hull.pop()
return (not len(hull) or hull[-1] != r) and hull.append(r) or hull
def _graham_scan(points):
"""Returns points on convex hull of an array of points in CCW order."""
points.sort()
lh = reduce(_keep_left, points, [])
uh = reduce(_keep_left, reversed(points), [])
return lh.extend(uh[i] for i in xrange(1, len(uh) - 1)) or lh
感谢您的非常明确的解释。我被'减少'会返回一些有意义的迭代的期望所欺骗,而真正的行动发生在turn_left中的'append'命令!哈! – roamcel