2017-07-15 82 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