当函数返回某个类型的对象或None时,指定什么类型的提示?

时间:2016-02-20 17:13:15

标签: python-3.x return-type type-hinting

由于我在Python中发现了类型提示,因此我开始使用它们,因为我认为它们对代码的读者很有用。我期待这些类型的提示最终将成为类型静态检查器,因为它会使代码更可靠,这对于一个严肃的项目非常重要。

除此之外,我有很多函数,其中返回类型可以是BSTNodeNone。例如,它可以是None,因为在搜索功能中,如果找不到BSTNode,则只返回None。有没有办法指定返回类型也可以是None

目前我使用的内容如下

def search(self, x) -> BSTNode:
    pass

我知道我可以使用字符串作为类型提示,但我不确定这是正确的还是最好的方法。

def search(self, x) -> "BSTNode | None":
    pass

2 个答案:

答案 0 :(得分:2)

我不知道管道在字符串类型提示中是否有任何特殊含义。因此,我坚持PEP 0484 documents联合类型的方式:

无论

from typing import Union

def search(self, x) -> Union[BSTNode, None]:
    pass

或更简洁but equivalent

from typing import Optional

def search(self, x) -> Optional[BSTNode]:
    pass

答案 1 :(得分:1)

感谢 PEP 604,可以使用管道 | 表示法,相当于 Union

def func() -> int | None:
    ...
my_var: int | None = None

# same as

from typing import Optional, Union

def func() -> Optional[int]:
    ...
def func() -> Union[int, None]:
    ...
my_var: Optional[int] = None
my_var: Union[int, None] = None

该功能是在 Python 3.10 中引入的,但您可以通过在文件开头导入注释来开始在 Python 3.8 和 3.9(不确定 3.7?)中使用它:

from __future__ import annotations