在生成器表达式中使用带有 `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(...)
.
中看到同样的问题
如果我在 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(...)
.