gpt4 book ai didi

python - python asyncio中是否有 `return await ...`的理由?

转载 作者:行者123 更新时间:2023-12-03 09:48:10 25 4
gpt4 key购买 nike

我知道在 js 中它不会添加任何内容来执行 awaitreturn 之前声明(即 return await ... ),但在 python 中也是如此,或者这以某种方式使物化更有可能或不同?

如果两者不相等,最佳做法是什么?

最佳答案

鉴于:

async def foo() -> str:
return 'bar'
调用 foo 会得到什么是 Awaitable ,显然你想要 await .你需要考虑的是你的函数的返回值。例如,您可以这样做:
def bar() -> Awaitable[str]:
return foo() # foo as defined above
那里, bar是一个同步函数,但返回 Awaitable这导致 str .
async def bar() -> str:
return await foo()
以上, bar本身是 async并导致 Awaitable调用时会导致 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在某个地方编辑过一次。如果您有两个 async ( async def fooasync def bar )但没有 awaitbar ,然后是 bar 的调用者必须 await两次,这很奇怪。

关于python - python asyncio中是否有 `return await ...`的理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59260268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com