在pythonasyncio中有没有理由使用“return await…”?

2024-04-28 22:53:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道在js中,它没有在return语句之前添加任何要做await的内容(即return await ...),但是在python中是这样吗,还是这使得物化更可能或更不同?

如果两者不相等,最佳实践是什么?


Tags: 内容returnjs语句await物化
1条回答
网友
1楼 · 发布于 2024-04-28 22:53:57

给予:

async def foo() -> str:
    return 'bar'

调用foo时得到的是一个^{},很明显你想await。你需要考虑的是函数的返回值。例如,您可以这样做:

^{pr2}$

这里的bar是一个同步函数,但返回一个Awaitable,这将导致str。在

async def bar() -> str:
    return await foo()

这里bar本身是async,调用时产生{},结果是str,同上。这两种用法没有真正的区别。不同之处如下:

async def bar() -> Awaitable[str]:
    return foo()

这里调用bar会产生一个Awaitable,结果是Awaitable,结果是str;完全不同。如果你天真地使用上述方法,你会得到这样的结果:

>>> asyncio.run(bar())
<coroutine object foo at 0x108706290>
RuntimeWarning: coroutine 'foo' was never awaited

根据经验,对async的每次调用都必须在某处进行一次await编辑。如果您有两个asyncasync def fooasync def bar),但是bar中没有{},那么{}的调用者必须await两次,这将是奇数。在

相关问题 更多 >