pipe并不是Python内置的库,如果你安装了easy_install,直接可以安装它,否则你需要自己下载它:http://pypi.python.org/pypi/pipe

之所以要介绍这个库,是因为它向我们展示了一种很有新意的使用迭代器和生成器的方式:流。pipe将可迭代的数据看成是流,类似于linux,pipe使用’|'传递数据流,并且定义了一系列的“流处理”函数用于接受并处理数据流,并最终再次输出数据流或者是将数据流归纳得到一个结果。我们来看一些例子。

第一个,非常简单的,使用add求和:

Python

1

2

3

>>> from pipe import *

>>> range(5) | add

10

求偶数和需要使用到where,作用类似于内建函数filter,过滤出符合条件的元素:

Python

1

2

>>> range(5) | where(lambda x: x % 2 == 0) | add

6

还记得我们定义的斐波那契数列生成器吗?求出数列中所有小于10000的偶数和需要用到take_while,与itertools的同名函数有类似的功能,截取元素直到条件不成立:

Python

1

2

3

4

5

>>> fib = fibonacci

>>> fib() | where(lambda x: x % 2 == 0)\

...       | take_while(lambda x: x < 10000)\

...       | add

3382

需要对元素应用某个函数可以使用select,作用类似于内建函数map;需要得到一个列表,可以使用as_list:

Python

1

2

>>> fib() | select(lambda x: x ** 2) | take_while(lambda x: x < 100) | as_list

[1, 1, 4, 9, 25, 64]

pipe中还包括了更多的流处理函数。你甚至可以自己定义流处理函数,只需要定义一个生成器函数并加上修饰器Pipe。如下定义了一个获取元素直到索引不符合条件的流处理函数:

Python

1

2

3

4

5

6

>>> @Pipe

... def take_while_idx(iterable, predicate):

...   for idx, x in enumerate(iterable):

...     if predicate(idx): yield x

...     else: return

...

使用这个流处理函数获取fib的前10个数字:

Python

1

2

>>> fib() | take_while_idx(lambda x: x < 10) | as_list

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

更多的函数就不在这里介绍了,你可以查看pipe的源文件,总共600行不到的文件其中有300行是文档,文档中包含了大量的示例。

pipe实现起来非常简单,使用Pipe装饰器,将普通的生成器函数(或者返回迭代器的函数)代理在一个实现了__ror__方法的普通类实例上即可,但是这种思路真的很有趣。

转的,至于from谁已经不得而知...

最新文章

  1. 在C#代码中应用Log4Net(三)Log4Net中配置文件的解释
  2. Delphi指针的用法
  3. 一个关于qml插件的文章-转
  4. 由一道淘宝面试题到False sharing问题
  5. cocos2D(四)---- CCSprite
  6. #pragma mark指令的作用
  7. Mysql语句的执行过程
  8. mysql添加用户,授权,刷新权限
  9. Python的socket模块与交互式指令
  10. wind量化交易
  11. Asp.Net 合并图片(二维码和其他图片合并)
  12. CODE[VS]4228 小猫爬山 小猫爬山
  13. mysql asyn 实战
  14. django模板语言的注释
  15. Redis 集合 set 操作, 有序集合
  16. YOGA Tablet 2 1371f 触屏失效,无声卡,蓝牙键盘都无法使用的解决办法
  17. shell 脚本sed替换文件中某个字符串
  18. python错误和异常(1)
  19. [置顶] 关于Qt的学习
  20. BZOJ - 2618 凸多边形 (半平面交)

热门文章

  1. Ubuntu Server搭建svn服务以及迁移方法【转】
  2. 加密工具类 - CryptoUtils.java
  3. 解决 iReport 生成 pdf 时显示不出中文的问题
  4. OSX 升级 vim
  5. 18.allegro区域约束规则设置
  6. php实现新闻页面
  7. 《OD大数据实战》HBase环境搭建
  8. Codeforces Round #272 (Div. 2) D. Dreamoon and Sets (思维 数学 规律)
  9. 快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]
  10. UVa 1149 (贪心) Bin Packing