2017-07-15 4 views
2

typingモジュールをPython 3で使用して非常にうれしく思います。またtwisted,tornadoと代替の代わりにasyncioを使用して非常にうれしく思います。Pythonのタイプと先物

私の質問は、正しくどのようにコルーチンの結果を定義するのですか?

コルーチンであると言わなければなりませんか?例1:

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

また、戻り値の型としてcoroutineの結果の型を定義する必要がありますか?例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

答えて

0

@jonrsharpeが言ったように、typing.Awaitableは完全にタスクに合っています。一般的に

3

、あなたべき通常の戻り値(のようなintfloatboolNoneおよびなど)あなたが呼び出し可能としてそれを使用する場合、それは次のようになります。詳細については

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

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

here

このissueは、mypyもサポートされています。

+0

関数の型として、はい、それは本当です。しかし、質問は関数の戻り値の型についてのみでした。とにかくありがとうございました – oblalex