2017-07-15 7 views
2

Ich bin sehr froh, typing Modul in Python 3 zu verwenden. Auch bin ich sehr froh, asyncio statt twisted, tornado und Alternativen zu verwenden.Python Typings und Futures

Meine Frage ist, wie man das Ergebnis einer Koroutine richtig definiert?

Sollten wir sagen, es ist nur eine Coroutine? Beispiel 1:

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

Oder sollten wir den Ergebnistyp der Coroutine als Rückgabewert definieren? Beispiel 2:

Wenn ja, wie dann mit einfachen Funktionen, die Futures zurückgeben? Beispiel 3:

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

Ist es ein richtiger Weg? Wie können wir dann sagen, was als ein Ergebnis der Zukunft erwartet wird?

+2

Verwenden Sie die generischen Versionen, z. https://docs.python.org/3/library/typing.html#typing.Awaitable – jonrsharpe

+0

Danke, das ist perfekt – oblalex

Antwort

3

Im Allgemeinen sollten Sie regelmäßig Rückgabewert (wie int, float, bool, None und etc), aber wenn man es als aufrufbare verwendet es sollte wie folgt aussehen:

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

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

Weitere Informationen : here.

Sie können diese issue auch für mypy unterstützen.

+0

Wie für einen Typ der Funktion, ja, das ist wahr. Aber die Frage bezog sich nur auf den Rückgabetyp der Funktion. Trotzdem danke – oblalex