这有点困扰我一段时间了.在学习Python之前我学习了Haskell,所以我一直喜欢将许多计算作为映射到列表中.这是由列表理解精美表达的(我在这里给出了pythonic版本):
result = [ f(x) for x in list ]
但在许多情况下,我们希望在x上执行多个语句,例如:
result = [ f(g(h(x))) for x in list ]
这很快变得笨重,难以阅读.
我的正常解决方案是将其扩展回for循环:
result = [] for x in list: x0 = h(x) x1 = g(x0) x2 = f(x1) result.append(x2)
关于这一点困扰我的一件事就是不得不初始化空列表'结果'.这是一个微不足道的事情,但它让我感到不快.我想知道是否有任何替代等效形式.一种方法可能是使用本地函数(这是他们在Python中调用的吗?)
def operation(x): x0 = h(x) x1 = g(x0) x2 = f(x1) return x2 result = [ operation(x) for x in list ]
上述两种形式中的任何一种都有什么特别的优点/缺点吗?或者是否有更优雅的方式?
您可以轻松地在Python中执行函数组合.
这是一个创建新函数的方法的演示,该函数是现有函数的组合.
>>> def comp( a, b ): def compose( args ): return a( b( args ) ) return compose >>> def times2(x): return x*2 >>> def plus1(x): return x+1 >>> comp( times2, plus1 )(32) 66
这是一个更完整的功能组合配方.这应该让它看起来不那么笨重.