TLDR: Ідіоматичним еквівалентом voidанотації типу повернення є -> None.
def foo() -> None:
...
Це відповідає тому, що функція без returnабо просто оголена returnоцінює None.
def void_func(): # unannotated void function
pass
print(void()) # None
Якщо пропустити тип повернення, це не означає, що значення повернення не існує. Відповідно до 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 розуміє, що цей коментар здебільшого корисний майбутнім читачам ...