搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 我爱学Python > python pipe模块用法

python pipe模块用法

我爱学Python 2017-10-30

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

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

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

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

python pipe模块用法

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

def fibonacci():   
      a=b=1  
      yield a   
      yield b   
      while True:          
          a, b = b, a+b   
          yield b

python pipe模块用法

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

python pipe模块用法

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

python pipe模块用法

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

python pipe模块用法

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

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



一道面试题:

读取文件,统计文件中每个单词出现的次数,然后按照次数高低排序。


本来蛮平淡无奇的一题,但一跟刚刚介绍的 Pipe 结合起来,就有意思了,这类数据流的处理,相当适合用 Pipe 来处理,花了点时间,写代码如下:



输出结果:


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《python pipe模块用法》的版权归原作者「Python热爱者」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Python热爱者微信公众号

Python热爱者微信公众号:Python-520

Python热爱者

手机扫描上方二维码即可关注Python热爱者微信公众号

Python热爱者最新文章

精品公众号随机推荐