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

问题描述 投票:98回答:1

假设我有一个功能:

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的返回类型?

python python-3.x python-3.5 type-hinting
1个回答
159
投票

你在找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的评论中指出的那样,qazxsw poi被转换为qazxsw poi所以不需要在这里使用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]} 属性,而不是直接访问它。

© www.soinside.com 2019 - 2024. All rights reserved.