问题:Python void返回类型注释
在python 3.x中,通常使用函数的返回类型注释,例如:
def foo() -> str:
return "bar"
“ void”类型的正确注释是什么?
我正在考虑3个选择:
def foo() -> None:- 不是逻辑IMO,因为
None不是类型,
- 不是逻辑IMO,因为
def foo() -> type(None):- 使用我知道的最佳语法
NoneType,
- 使用我知道的最佳语法
def foo():- 省略显式的返回类型信息。
选项2对我来说似乎是最合乎逻辑的,但是我已经看到过一些实例1。
回答 0
回答 1
TLDR:void返回类型注释的惯用等效项是-> None。
def foo() -> None:
...
这符合,如果没有一个函数return或只是一个光秃秃return的计算结果为None。
def void_func(): # unannotated void function
pass
print(void()) # None
省略返回类型也并不意味着就没有返回值。根据PEP 484:
对于选中的函数,参数和返回类型的默认注释为
Any。
这意味着该值被认为是动态类型的,并且静态地支持任何操作。这实际上是的相反含义void。
Python中的类型提示并不严格要求实际类型。例如,注释可以使用类型名称为Union[str, int],,的字符串Union[str, 'int'],'Union[str, int]'并且各种变体是等效的。
同样,类型注释None被认为是 “ is of NoneType”。这不仅可以用于返回类型,尽管您会经常在以下位置看到它:
bar : None
def foo(baz: None) -> None:
return None
这也适用于泛型类型。例如,您可以使用Nonein Generator[int, None, None]指示生成器不接受也不返回值。
即使PEP 484建议采用这种None方式type(None),您也不应明确使用后者。该类型提示规范并没有包括任何形式的type(...)。从技术上讲,这是一个运行时表达式,其支持完全取决于类型检查器。该mypy项目正在考虑取消对type(None)484的支持并将其也从484中删除。
或者,也许我们应该更新PEP 484以不建议该
type(None)类型有效。None是唯一正确的拼写吗?应该有一种-最好只有一种-明显的方式来做等。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
