擅长:python、mysql、java
<p>您<a href="https://www.python.org/dev/peps/pep-0492/#coroutine-generators" rel="nofollow noreferrer">can't</a>在协程中使用yield。要实现您的想法,我看到的唯一方法是实现<a href="https://www.python.org/dev/peps/pep-0492/#asynchronous-iterators-and-async-for" rel="nofollow noreferrer">Asynchronous Iterator</a>。如果我是对的,像这样:</p>
<pre><code>class MapFilter:
def __init__(self, aiterable, p, func):
self.aiterable = aiterable
self.p = p
self.func = func
async def __aiter__(self):
return self
async def __anext__(self):
while True:
payload = await self.aiterable.__anext__() # StopAsyncIteration would be raise here on no new values
if self.p(payload):
return self.func(payload)
</code></pre>
<p>让我们来测试一下。下面是helper <code>arange</code>类的完整示例(我从<a href="https://stackoverflow.com/a/33539895/1113207">here</a>获取):</p>
^{pr2}$
<p>输出:</p>
<pre><code>6
8
</code></pre>