saf*_*fsd 0 python coding-style idioms
这有点困扰我一段时间了.在学习Python之前我学习了Haskell,所以我一直喜欢将许多计算作为映射到列表中.这是由列表理解精美表达的(我在这里给出了pythonic版本):
result = [ f(x) for x in list ]
Run Code Online (Sandbox Code Playgroud)
但在许多情况下,我们希望在x上执行多个语句,例如:
result = [ f(g(h(x))) for x in list ]
Run Code Online (Sandbox Code Playgroud)
这很快变得笨重,难以阅读.
我的正常解决方案是将其扩展回for循环:
result = []
for x in list:
x0 = h(x)
x1 = g(x0)
x2 = f(x1)
result.append(x2)
Run Code Online (Sandbox Code Playgroud)
关于这一点困扰我的一件事就是不得不初始化空列表'结果'.这是一个微不足道的事情,但它让我感到不快.我想知道是否有任何替代等效形式.一种方法可能是使用本地函数(这是他们在Python中调用的吗?)
def operation(x):
x0 = h(x)
x1 = g(x0)
x2 = f(x1)
return x2
result = [ operation(x) for x in list ]
Run Code Online (Sandbox Code Playgroud)
上述两种形式中的任何一种都有什么特别的优点/缺点吗?或者是否有更优雅的方式?
您可以轻松地在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
Run Code Online (Sandbox Code Playgroud)
这是一个更完整的功能组合配方.这应该让它看起来不那么笨重.
归档时间: |
|
查看次数: |
247 次 |
最近记录: |