Python типирования и фьючерсы

Я очень рад использовать модуль ввода в Python 3. Кроме того, я очень рад использовать asyncio вместо twisted, tornado и альтернативы.

Мой вопрос - как правильно определить результат сопрограммы?

Должны ли мы сказать, что это просто сопрограмма? Пример 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 ответа

Решение

Как сказал @jonrsharpe, набор текста. Ожидаемый идеально подходит для этой задачи.

В общем, вы должны регулярно возвращать значение (например, int, float, bool, None и т. д.), но если вы используете его как вызываемый, он должен выглядеть так:

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

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

Для получения дополнительной информации: здесь.

Вы можете посмотреть на этот вопрос также для mypy служба поддержки.

Другие вопросы по тегам