如何在Python中创建迭代器管道?

时间:2011-05-31 13:47:16

标签: python iterator pipeline

是否有用于在Python中创建迭代器管道的库或推荐方法?

例如:

>>>all_items().get("created_by").location().surrounding_cities()

我还希望能够访问迭代器中对象的属性。在上面的示例中,all_items()返回项的迭代器,并且项具有不同的创建者。

.get("created_by")然后返回项目(即人员)的“created_by”属性,然后location()返回每个人的城市,然后将其传送到surrounding_cities(),它返回每个位置的周围城市的所有迭代器(因此最终结果是周围城市的大型列表)。

3 个答案:

答案 0 :(得分:4)

你不只是在处理迭代器吗?在Python中使用迭代器的自然方法是for循环:

for item in all_items():
    item.get("created_by").location().surrounding_cities()

还有其他可能性,例如列表推导可能会更有意义,这取决于您正在做什么(如果您尝试生成列表作为输出,通常会更有意义。)

答案 1 :(得分:1)

我建议您查看如何使用coroutines in python实现管道,更具体地说是pipe example

如果您根据上面的示例实现了您的功能,那么您的代码将是这样的(为简单起见,我想您将要打印这些城市):

all_items(get_location(get_creators(get_surrounding_cities(printer()))))

答案 2 :(得分:1)

在您的示例中,您实际上只有两个迭代器方法all_itemssurrounding_cities,因此您只需使用itertools.chain即可:

from itertools import chain

cities = chain.from_iterable(
    item.get("created_by").location().surrounding_cities() for item in all_items()
)

cities将是一个迭代器,列出项目的所有周边城市