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
служба поддержки.