国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

有趣的庫:pipe(類似linux|管道)庫

2019-11-14 16:57:48
字體:
來源:轉載
供稿:網友

 

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誰已經不得而知...


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新密市| 合作市| 西和县| 潢川县| 和静县| 平安县| 象山县| 开平市| 通海县| 台安县| 台州市| 成武县| 温泉县| 石阡县| 依安县| 静海县| 中山市| 禹城市| 景洪市| 神农架林区| 东兴市| 房山区| 襄汾县| 吉安市| 措勤县| 黔东| 临漳县| 乌审旗| 高陵县| 澄迈县| 宁远县| 邵武市| 云林县| 洛隆县| 常德市| 达拉特旗| 梁平县| 宁强县| 丽江市| 云龙县| 怀化市|