2024-04-28 22:53:57 发布
网友
我知道在js中,它没有在return语句之前添加任何要做await的内容(即return await ...),但是在python中是这样吗,还是这使得物化更可能或更不同?
return
await
return await ...
如果两者不相等,最佳实践是什么?
给予:
async def foo() -> str: return 'bar'
调用foo时得到的是一个^{},很明显你想await。你需要考虑的是函数的返回值。例如,您可以这样做:
foo
这里的bar是一个同步函数,但返回一个Awaitable,这将导致str。在
bar
Awaitable
str
async def bar() -> str: return await foo()
这里bar本身是async,调用时产生{},结果是str,同上。这两种用法没有真正的区别。不同之处如下:
async
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 foo和async def bar),但是bar中没有{},那么{}的调用者必须await两次,这将是奇数。在
async def foo
async def bar
给予:
调用} ,很明显你想
^{pr2}$foo
时得到的是一个^{await
。你需要考虑的是函数的返回值。例如,您可以这样做:这里的
bar
是一个同步函数,但返回一个Awaitable
,这将导致str
。在这里},结果是
bar
本身是async
,调用时产生{str
,同上。这两种用法没有真正的区别。不同之处如下:这里调用
bar
会产生一个Awaitable
,结果是Awaitable
,结果是str
;完全不同。如果你天真地使用上述方法,你会得到这样的结果:根据经验,对},那么{}的调用者必须
async
的每次调用都必须在某处进行一次await
编辑。如果您有两个async
(async def foo
和async def bar
),但是bar
中没有{await
两次,这将是奇数。在相关问题 更多 >
编程相关推荐