我是一名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()
等?
答案 0 :(得分:0)
有一个库可以完全实现您要寻找的内容:
pyxtension在https://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
,它就会被安装。