簡體   English   中英

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

[英]How to create an iterator pipeline in Python?

是否有在 Python 中創建迭代器管道的庫或推薦方法?

例如:

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

我還希望能夠訪問迭代器中對象的屬性。 在上面的例子中, all_items()返回一個item的迭代器,並且item有不同的創建者。

.get("created_by")然后返回項目(即人)的“created_by”屬性,然后location()返回每個人的城市,然后將其通過管道傳遞給surrounding_cities() ,它返回所有迭代器每個位置的周邊城市(因此最終結果是周邊城市的大列表)。

你不只是處理一個迭代器嗎? 在 Python 中使用迭代器的自然方式是 for 循環:

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

還有其他可能性,例如列表推導,這可能更有意義,具體取決於您在做什么(如果您嘗試生成一個列表作為輸出,通常更有意義)。

在您的示例中,您實際上只有兩個迭代器方法, 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將是一個迭代器,列出項目的所有周邊城市

我建議您查看如何在 python 中使用協程實現管道,更具體地說,這個pipe 示例

如果您根據上面的示例實現了函數,那么您的代碼將是這樣的(為簡單起見,我想您會想要打印這些城市):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM