这是困扰我一段时间的事情。我在学习 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 ]
上述两种形式中的任何一种都有什么特别的优点/缺点吗?还是有更优雅的方式?