日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python pipe_python pipe模块用法

發(fā)布時間:2023/12/18 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python pipe_python pipe模块用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

pipe并不是Python內(nèi)置的庫,如果你安裝了easy_install,直接可以安裝它,否則你需要自己下載它:http://pypi.python.org/pypi/pipe

之所以要介紹這個庫,是因為它向我們展示了一種很有新意的使用迭代器和生成器的方式:流。pipe將可迭代的數(shù)據(jù)看成是流,類似于linux,pipe使用'|'傳遞數(shù)據(jù)流,并且定義了一系列的“流處理”函數(shù)用于接受并處理數(shù)據(jù)流,并最終再次輸出數(shù)據(jù)流或者是將數(shù)據(jù)流歸納得到一個結(jié)果。我們來看一些例子。

第一個,非常簡單的,使用add求和:

[python]

>>> from pipe import *

>>> range(5) | add

10

求偶數(shù)和需要使用到where,作用類似于內(nèi)建函數(shù)filter,過濾出符合條件的元素:

[python]

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

6

還記得我們定義的斐波那契數(shù)列生成器嗎?求出數(shù)列中所有小于10000的偶數(shù)和需要用到take_while,與itertools的同名函數(shù)有類似的功能,截取元素直到條件不成立:

def fibonacci():

a=b=1

yield a

yield b

while True:

a, b = b, a+b

yield b

[python]>>> fib = fibonacci

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

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

... | add

3382

需要對元素應用某個函數(shù)可以使用select,作用類似于內(nèi)建函數(shù)map;需要得到一個列表,可以使用as_list:

[python]

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

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

pipe中還包括了更多的流處理函數(shù)。你甚至可以自己定義流處理函數(shù),只需要定義一個生成器函數(shù)并加上修飾器Pipe。如下定義了一個獲取元素直到索引不符合條件的流處理函數(shù):

[python]

>>> @Pipe

... def take_while_idx(iterable, predicate):

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

... if predicate(idx): yield x

... else: return

...

使用這個流處理函數(shù)獲取fib的前10個數(shù)字:

[python]

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

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

更多的函數(shù)就不在這里介紹了,你可以查看pipe的源文件,總共600行不到的文件其中有300行是文檔,文檔中包含了大量的示例。

pipe實現(xiàn)起來非常簡單,使用Pipe裝飾器,將普通的生成器函數(shù)(或者返回迭代器的函數(shù))代理在一個實現(xiàn)了__ror__方法的普通類實例上即可,但是這種思路真的很有趣。

一道面試題:

讀取文件,統(tǒng)計文件中每個單詞出現(xiàn)的次數(shù),然后按照次數(shù)高低排序。

本來蠻平淡無奇的一題,但一跟剛剛介紹的 Pipe 結(jié)合起來,就有意思了,這類數(shù)據(jù)流的處理,相當適合用 Pipe 來處理,花了點時間,寫代碼如下:

[('request', 91), ('POST', 81), ('and', 38), ('u', 36), ('if', 33),

('in', 32), ('team', 29), ('line', 23), ('objects', 20), ('gcmgroups',

16), ('get', 14), ('import', 14), ('save', 13), ('str', 12), ('0', 11),

('1', 11), ('i', 11), ('False', 10), ('GcwGroups', 9), ('from', 9),

('group_name', 9), ('path', 9), ('team_groups', 9), ('add', 8), ('else',

8), ('extra_context', 8), ('form2', 8), ('return', 8), ('Area', 7),

('baoming', 7), ('cname', 7), ('cname1', 7), ('cname2', 7), ('form1',

7), ('mysql_cur',

7), ('8', 6), ('gender', 6), ('is_del', 6), ('time', 6), ('user', 6),

('20', 5), ('7', 5), ('def', 5), ('depth', 5), ('for', 5), ('gcwteam',

5), ('radio1', 5), ('13', 4), ('16', 4), ('2', 4), ('2013', 4), ('5',

4)]

總結(jié)

以上是生活随笔為你收集整理的python pipe_python pipe模块用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。