繁体   English   中英

如何使用类型提示指定“可为空”返回类型

[英]How to specify "nullable" return type with type hints

假设我有一个功能:

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的东西指定返回类型?

您正在寻找Optional

由于您的返回类型可以是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]表示XY类型的值。


如果您因为担心其他人可能会偶然发现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)] 被转换为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__属性,而不是直接访问它。

您可以只使用垂直线datetime | None datetime | None (类似于 OR 运算符):

def get_some_date(some_argument: int=None) -> datetime | None:
   # rest of code

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM