Как указать тип возвращаемого типа с нулевым типом с подсказками типа

Предположим, что у меня есть функция:

def get_some_date(some_argument: int=None) -> %datetime_or_None%: if some_argument is not None and some_argument == 1: return datetime.utcnow() else: return None 

Как указать тип возврата для чего-то, что может быть None ?

One Solution collect form web for “Как указать тип возвращаемого типа с нулевым типом с подсказками типа”

Поскольку ваш тип возвращаемого значения может быть как datetime (возвращаемый с datetime.utcnow() ) или None вы должны использовать Optional[datetime] :

 from typing import Optional def get_some_date(some_argument: int=None) -> Optional[datetime]: # as defined 

Из документации, Optional является сокращением для:

Optional[X] эквивалентен Union[X, None] .

где Union[X, Y] означает значение типа X или Y


Если вы хотите быть явным из-за опасений, что другие могут наткнуться на Optional и не осознают, что это имеет значение, вы всегда можете использовать Union :

 from typing import Union def get_some_date(some_argument: int=None) -> Union[datetime, None]: 

Но я сомневаюсь, что это хорошая идея. Optional – это ориентировочное имя, и оно сохраняет несколько нажатий клавиш.

Как указано в комментариях @ Michael0x2a Union[T, None] транслируется в Union[T, type(None)] поэтому здесь не нужно использовать type .

Визуально они могут отличаться, но программно, в обоих случаях результат точно такой же ; Union[datetime.datetime, NoneType] будет типом, хранящимся в get_some_date.__annotations__ * :

 >>> from typing import get_type_hints >>> print(get_type_hints(get_some_date)) {'return': typing.Union[datetime.datetime, NoneType], 'some_argument': typing.Union[int, NoneType]} 

* Используйте typing.get_type_hints чтобы захватить атрибут __annotations__ объектов вместо прямого доступа к нему.

  • Как указать несколько типов возврата с помощью типов-подсказок
  • Тип намека на Python 2
  • Как я могу сказать PyCharm, какой тип должен быть параметром?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.