英文原文:
http://dev-tricks.net/pipe-infix-syntax-for-python翻译版本:
http://blog.csdn.net/lanphaday/article/details/6287114刚刚才发现的这东西,觉得挺有意思的,一个简单的例子是:
>>> from pipe import *
>>> [1, 2, 3, 4, 5] | add
15
复杂一点的,例如求Fibonacci数列前100项的和:
from pipe import *
def fib():
a, b = 1, 0
while True:
yield a
a, b = a + b, a
print enumerate(fib()) | take_while(lambda (i, x): i < 100) | select(lambda (i, x): x) | add
除了add之外,作者还实现了常见的方法,例如
select: 类似于 map
where: 类似于 filter,后者
sort/reverse/max/min/take/tail/skip ...
这个库在pypi里有:
http://pypi.python.org/pypi/pipe看了下核心实现非常简单,就是利用了 __ror__ 和 decorator:
class Pipe:
def __init__(self, function):
self.function = function
def __ror__(self, other):
return self.function(other)
def __call__(self, *args, **kwargs):
return Pipe(lambda x: self.function(x, *args, **kwargs))
@
Pipedef add(x):
return sum(x)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/76944
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.