Python перебирает асинхронный генератор c, который выдает список - PullRequest
1 голос
/ 08 марта 2020

У меня довольно распространенная схема выбора страницы содержимого и разбивки на страницы. Возможно, для этого есть более подходящие библиотеки, но я новичок в Python и пытаюсь узнать, как использовать генераторы для этой цели.

В приведенном ниже коде я хотел бы перебрать асинхронный код Генератор c, который выдает коллекцию предметов, используя один для l oop.

import asyncio

async def rest_api_list(after):
  after = 0 if after is None else after
  return iter(range(after, after + 3, 1)), (after + 3 if after <= 24 else None)

async def page_items():
  after = None
  while True:
    items, after = await rest_api_list(after)
    yield items
    if after == None:
      break

async def main():
  async for items in page_items():
    # ---> !!!!!!!!!!!!!!!!!!!!!!! not elegant to loop twice here
    for item in items:
      print(item)

asyncio.run(main())

Кажется, одно простое исправление можно изменить с:

    yield items

на

    for item in items:
      yield item

но он не чувствует самый python -i sh способ сделать это. Есть ли лучшие подходы к этому?

...