这是让我困扰了一段时间的事情。在学习Python之前,我学习了Haskell,所以我一直喜欢将许多计算视为映射到列表的方式。这可以通过列表推导式来精美地表达(这里是Python风格的版本):
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)
关于这个事情,让我非常困扰的是必须初始化空列表 result。这是一个琐事,但却让我不开心。我在想是否有任何其他等价的形式。一种方法可能是使用本地函数(Python 中是否称为这个?)
def operation(x):
x0 = h(x)
x1 = g(x0)
x2 = f(x1)
return x2
result = [ operation(x) for x in list ]
这两种形式有特别的优缺点吗?或者也许有更加优美的方式?