我经常发现,在处理列表时,我最终会得到难以阅读的 lambda,因为它们涉及使用文字常量对数组进行索引,而常量的含义很难推断。比如:
result = list(map(lambda p: (p[0] - altX) / math.cos(p[1]), list_))
虽然通常更复杂。我想为这些列表元素分配临时名称,例如:
x,y = p
(x - altX) / math.cos(y)
有什么优雅的方法可以做到这一点吗?
到目前为止,我发现的最佳解决方案是简单地创建一个独立的函数(即使用 def)。但这通常感觉很重,并且需要将上下文作为额外的参数传递。
def Helper(p, altX):
x, y = p
(x - altX) / math.cos(y)
使用 map
将额外的“上下文”变量传递给函数的难度加大了这种方法的笨拙性。例如,
result = list(map(func, list_, 1))
语法不正确。我想要这样的东西:
result = list(lambda p as (x,y): (x - altX) / math.cos(y), list_)
或
result = list(lambda p: with p as x,y: (x - altX) / math.cos(y), list_)
或
result = list(lambda p: using p[0] as x: using p[1] as y: (x - altX) / math.cos(y), list_)
另一个 函数,该函数除了解压 p
以用作第一个函数的参数之外什么也不做:
result = list(lambda p: (lambda x,y: (x - altX) / math.cos(y))(*p), list_)
那里