2017-07-15 81 views
2

我很高兴在Python 3中使用typing模块。此外,我很高兴使用asyncio而不是twisted,tornado和替代品。Python类型和期货

我的问题是如何正确定义协程的结果?

我们应该说它只是一个协程?例1:

async def request() -> asyncio.Future: 
    pass 

或者我们应该定义协程的结果类型作为返回值的类型吗?示例2:

async def request() -> int: 
    pass 

如果是,那么如何用普通函数返回期货?示例3:

def request() -> asyncio.Future: 
    f = asyncio.Future() 
    # Do something with the future 
    return f 

这是正确的方法吗?那么我们如何能够预测未来的结果呢?

+2

使用通用版本,例如https://docs.python.org/3/library/typing.html#typing.Awaitable – jonrsharpe

+0

谢谢,这是完美的 – oblalex

回答

3

在一般情况下,你应该定期返回值(如intfloatboolNone和等),但如果你把它当作一个可调用它应该是这样的:

async def bar(x: int) -> str: 
    return str(x) 

cbar: Callable[[int], Awaitable[str]] = bar 

欲了解更多信息:here

你可以看看这个issue也支持mypy

+0

至于一种功能,是的,这是真的。但问题只是关于函数的返回类型。无论如何,谢谢 – oblalex