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

4 投票
3 回答
2734 浏览
提问于 2025-04-16 18:40

有没有什么库或者推荐的方法可以在Python中创建一个迭代器管道?

比如说:

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

我还想能够访问迭代器中对象的属性。在上面的例子中,all_items() 返回一个物品的迭代器,而这些物品有不同的创建者。

接着,.get("created_by") 就可以获取这些物品的 "created_by" 属性(也就是创建这些物品的人),然后 location() 会返回每个人所在的城市,接着把这些城市传给 surrounding_cities(),这个函数会返回每个城市周围的所有城市的迭代器(所以最后的结果就是一个包含许多周围城市的大列表)。

3 个回答

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 就会是一个迭代器,列出所有与这些项目相关的周边城市。

1

我建议你查一下如何在Python中用协程来实现管道,特别是这个管道示例

如果你按照上面的示例来实现你的函数,那么你的代码大概会是这样的(为了简单起见,我假设你想打印那些城市):

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

你是不是只是在处理一个迭代器呢?在Python中,使用迭代器最自然的方式就是用for循环:

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

还有其他的写法,比如列表推导式,这种方式在你想生成一个列表作为输出时通常会更合适。

撰写回答