None vs NoneType 类型注释

None vs NoneType for type annotation

如果一个函数可以 return None,类型注释不应该使用 NoneType 吗?

例如,我们不应该使用这个:

from types import NoneType

def my_function(num: int) -> int | NoneType:

    if num > 0:
        return num

    return None

而不是:

def my_function(num: int) -> int | None:

    if num > 0:
        return num

    return None

?

没有。 types.NoneType was removed in Python 3。尝试从 types 导入 NoneType 将在 Python 3 中生成 ImportError,在 Python 3.10 之前。 (对于 Python 3.10,types.NoneType 被重新引入;但是,出于类型提示的目的,types.NoneTypeNone 是等价的,为了简洁起见,您应该更喜欢后者。

Python 3.10 中,int | None 是描述可能是 None 的 return 类型的方式。但是,对于 3.10 之前的 Python 版本,此语法不受支持,因此您应该使用 Optional[int] 代替。