我有一个代码是这样的:
import asyncio
from typing import List
def some_callback(result):
print(result)
async def b() -> List[int]:
return [1, 2, 3]
async def a() -> None:
search = asyncio.ensure_future(b())
search.add_done_callback( some_callback)
await search
loop = asyncio.get_event_loop()
loop.run_until_complete(a())
loop.close()
我试图向some_callback
函数添加类型注释,但是我不能完全理解如何注释result
变量。应该是Coroutine
?或者Awaitable
?在
当我使用mypy
的reveal_type
时,result
变量的输出是Any
。在
该程序的输出为:
^{pr2}$我应该如何正确记录此功能?在
通常,只需打印变量的类型,就可以获得某些变量的基本注释:
{{cd2>看起来像是一个类型:
^{pr2}$但正如您所指出的,我们还可以使用比
Task
更抽象的类型Awaitable
,因为Task
是Awaitable
的(子类):我们的选择现在缩小到
Task
或者它的一个父类,比如Awaitable
(包括最极端的情况-Any
,它是任何类的父类,mypy已经向您建议过)。在add_done_callback
是Future
的method,根据文档将接收未来对象作为它的参数。它不会是任何类型的Awaitable
(像协同程序),而只是Future
或者它的一些子类,比如{在选择类型注释时,对于函数可以接受的参数(工作正常)最抽象,对于它可以返回的内容最具体是有意义的。所以在
Future
和Task
之间选择,我更喜欢Future
(假设您不打算只使用Task
特定的属性)。根据这个逻辑,最终答案是:这听起来有点复杂和耗时,但是一旦你有了想法,你就可以更快地选择注释了。在
相关问题 更多 >
编程相关推荐