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
Это также относится к универсальным типам. Например, вы можете использовать None
in, 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 понимает это, этот комментарий в основном для будущих читателей ...