在生成器表达式中使用带有 `async_generator` 的 `any`

Use `any` with an `async_generator` Inside a Generator Expression

如果我在 Python 中有一个常规的可迭代对象,我可以使用 any 和生成器理解来获取布尔值。例如

from pathlib import Path

path = Pathlib("/foo/bar/baz")
has_contents = any(path.iterdir())

我可以用 async_generator 和列表理解来做同样的事情:

is_empty = any([x async for x in async_generator])

但是似乎不可能用 async_generator 和生成器理解来做同样的事情。

not_empty = any(x async for x in foo.iter())

加注

TypeError: 'async_generator' object is not iterable

有没有办法在生成器理解中使用 async_generator

问题是在生成器理解中没有使用 async_generator。那部分没问题。

>>> async def ag():
...     yield 0
...     yield 1
... 
>>> (x async for x in ag())
<async_generator object <genexpr> at 0x7fffe34fd640>

问题是消耗一个异步生成器,其函数需要一个同步迭代器。

在这种情况下,您不能使用常规 for x in ... 语法对其进行迭代,也不应将其传递给需要同步迭代器的函数,例如 any。您会在 list(...).

中看到同样的问题