TL; DR: идиоматический эквивалент voidаннотации возвращаемого типа - -> None.
def foo() -> None:
...
Это соответствует тому, что функция без returnили просто returnоценивает None.
def void_func():
pass
print(void())
Отсутствие возвращаемого типа не означает, что возвращаемого значения нет. Согласно PEP 484 :
Для проверенной функции аннотация по умолчанию для аргументов и для типа возвращаемого значения - Any.
Это означает, что значение считается динамически типизированным и статически поддерживает любую операцию . Это практически противоположное значение void.
Подсказка типов в Python не требует строго фактических типов. Например, аннотации могут использовать строки имен типа: Union[str, int], Union[str, 'int'], 'Union[str, int]'а также различные варианты эквивалентны.
Точно так же аннотация типа Noneсчитается означающей «имеет NoneType». Это можно использовать не только для возвращаемых типов, хотя чаще всего вы увидите это там:
bar : None
def foo(baz: None) -> None:
return None
Это также относится к универсальным типам. Например, вы можете использовать Nonein, Generator[int, None, None]чтобы указать, что генератор не принимает и не возвращает значения.
Несмотря на то, что PEP 484 предполагает, что это Noneозначает type(None), вы не должны использовать последнюю форму явно. Спецификация подсказки типов не включает никаких форм type(...). Технически это выражение времени выполнения, и его поддержка полностью зависит от средства проверки типов. mypyПроект рассматривает возможность удалить поддержку для type(None)и удалить его из 484 , а также.
Или, может быть, нам следует обновить PEP 484, чтобы не предполагать, что type(None)это действительный тип и Noneявляется единственно правильным написанием? Должен быть один - и желательно только один - очевидный способ сделать это и т. Д.
--- JukkaL, 18 мая 2018 г.
voidвозвращаемым типом. Любая функция (или ветвь в функции) без явного значенияreturnвернетсяNone. Я предполагаю, что OP понимает это, этот комментарий в основном для будущих читателей ...