Python是否具有标准的流畅迭代器运算符,如Java 8 Stream / Kotlin Sequence?

时间:2016-10-15 02:50:02

标签: python functional-programming

我是一名Java / Kotlin开发人员,他使用Python来教授明年的课程。我有点震惊的是,我没有找到任何功能构造来处理类似链式运算符的迭代。这可以在Java中找到Streams,如下所示:

Stream<MyItem> filtered = myItems.stream().filter(item -> item.isSelected());

或Kotlin with Sequences:

val filtered = myItems.asSequence().filter { it.isSelected }

我认为Scala也有类似的东西。我知道Python中implement fluent interfaces是可能的,RxPy通过反应式编程带来这些迭代运算符。但是,没有固有的语言功能,标准实用程序或公共库以基于拉取的方式完成这些运算符,如map()filter()flatMap()等?

1 个答案:

答案 0 :(得分:0)

有一个库可以完全实现您要寻找的内容:

pyxtensionhttps://github.com/asuiu/pyxtension上,它也已经可以投入生产并在PyPi上进行维护。 正常的Py功能代码如下:

lst = xrange(1,6)
reduce(lambda x, y: x * y, map(lambda _: _ * _, filter(lambda _: _ % 2 == 0, lst)))

可以改写成这样:

the_stream = stream( xrange(1,6) )
the_stream.\
    filter(lambda _: _ % 2 == 0).\
    map(lambda _: _ * _).\
    reduce(lambda x, y: x * y)

它支持称为fastmap的多线程映射和称为mpmap的多进程映射。 它已经准备就绪,可以直接使用,并且在Python迭代器中使用懒惰评估很繁重,因此您不会像Pandas DataFrame那样处理内存中的所有内容。 pyxtension.streams对于处理CSV,Lined Json,MessagePack,DataBase游标等数据流更加方便。

有了它,您可以轻松地将所有CPU内核用于并行处理,以解决GIL限制。 只需运行pip install pyxtension,它就会被安装。