由于我在Python中发现了类型提示,因此我开始使用它们,因为我认为它们对代码的读者很有用。我期待这些类型的提示最终将成为类型静态检查器,因为它会使代码更可靠,这对于一个严肃的项目非常重要。
除此之外,我有很多函数,其中返回类型可以是BSTNode
或None
。例如,它可以是None
,因为在搜索功能中,如果找不到BSTNode
,则只返回None
。有没有办法指定返回类型也可以是None
?
目前我使用的内容如下
def search(self, x) -> BSTNode:
pass
我知道我可以使用字符串作为类型提示,但我不确定这是正确的还是最好的方法。
def search(self, x) -> "BSTNode | None":
pass
答案 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