当前位置: 首页 > 知识库问答 >
问题:

Python空返回类型注释

宰修能
2023-03-14

在python 3.x中,通常使用函数的返回类型注释,例如:

def foo() -> str:
    return "bar"

“void”类型的正确注释是什么?

我正在考虑三种选择:

  • def foo()-
  • 使用我所知道的最好的语法来获取 NoneType
    < li >省略显式返回类型信息。

选项2对我来说似乎是最合乎逻辑的,但我已经看到了1的一些实例。


共有2个答案

长孙高远
2023-03-14
匿名用户

TLDR:虚空返回类型注释的惯用等价物是 -

def foo() -> None:
    ...

这与没有< code>return或只有简单的< code>return的函数计算结果为< code>None相匹配。

def void_func():  # unannotated void function
    pass

print(void_func())  # None

省略返回类型并不意味着没有返回值。根据PEP 484:

对于选中的函数,参数和返回类型的默认注释是Any

这意味着该值被认为是动态类型的,静态支持任何操作。这实际上是< code>void的反义词。

Python中的类型暗示并不严格要求实际类型。例如,注释可能使用类型名称的字符串:<code>Union[str,int],<code>Union[str,'int'],<code>'Union[str,int']'和各种变体是等效的。

类似地,类型注释< code>None被认为是“属于< code>NoneType”的意思。这可以在其他情况下使用,也可以在返回类型中使用,尽管您最常看到的是返回类型注释:

bar : None

def foo(baz: None) -> None:
    return None

这也适用于泛型类型。例如,可以在< code>Generator[int,None,None]中使用< code>None来指示生成器不接受或返回值。

即使PEP 484建议None表示type(None),也不应显式使用后一种形式。类型暗示规范不包括任何形式的类型(…)。这在技术上是一个运行时表达式,其支持完全取决于类型检查器。mypy项目正在考虑是否删除对<code>类型(None)

或者也许我们应该更新PEP 484以不建议type(无)作为类型有效,并且是唯一正确的拼写?应该有一个——最好只有一个——明显的方法来做到这一点等等。

--- 2018年5月18日

谢璞
2023-03-14

这直接来自 PEP 484 -- 类型提示文档:

在类型提示中使用时,表达式 None 被视为等效于 type(None)

而且,如您所见,大多数示例使用<code>None</code>作为返回类型。

 类似资料:
  • 问题内容: PHP 7引入了返回类型声明。这意味着我现在可以指示返回值是某个类,接口,数组,可调用或新暗示的标量类型之一,对于函数参数而言,这是可能的。 通常,值并不总是存在,并且您可能返回某种类型的值或null。尽管可以通过将参数的默认值设置为null()来使参数为可空,但似乎没有办法对返回类型执行此操作。的确是这样,还是我不知如何找到方法呢?这些不起作用: 问题答案: PHP 7.1现在支持可

  • 问题内容: 在python 3中,我可以设置参数并返回类型注释。例: 问题是我无法使用当前类(图形)的返回类型进行注释,该类型尚未定义。例: 这段代码有错误 这些注释对于记录文档以及允许IDE识别参数和返回类型都非常有用=>启用自动完成功能 UPD:所以我想到的是这是不可能的,或者需要一些我不喜欢的技巧,所以我决定使用 可以理解的文档,尽管这违反了规则。缺点是它不适用于IDE自动完成功能。 问题答

  • 假设我已经包装了我的C类和,并且可以通过SWIG生成的模块从Python访问它们: 在Python中,我创建了面向用户的类,它是一个浅层代理,主要添加docstring,并允许IDE对参数名称进行制表符补全: 问题在于,返回类型为,它没有docstring,也不显示参数名称(swig将所有参数公开为)。相反,我希望它提供我自己的浅代理

  • 问题内容: 我如何使用类型提示来注释一个返回总是返回两个值的函数:a和a ?提示很接近,除了将返回值类型限制为元组,而不是生成器或其他可迭代类型。 我主要是好奇的,因为我想注释一个用于返回多个值的函数,如下所示: 通常函数喜欢做这样的事情(它返回一个元组),但我喜欢的类型暗示要足够灵活,以取代发电机或列表或别的东西返回的元组。 问题答案: 您总是返回 一个 对象;使用只需返回一个元组。 是的,完全

  • 我开始更多地使用Python3的类型支持,并且我希望能够注释作为替代构造函数的的返回类型。 下面是一个简单的例子;如果我包含注释,它将失败: 那么,在为类型注释定义类之前,如何引用类呢?

  • 我有一个任务,我们要创造一个石头,纸,剪刀的游戏。它指定我们必须创建一个抽象的“工具”类,其中有三个子类:“ToolRock”、“ToolPaper”、“ToolScissors”。抽象类应该有一个“+getFeagnet():tool”函数(用斜体写成)。 我的假设是做一个像这样的抽象函数: RockTool类被指定为具有函数“+get弱点():tool”(不是用斜体写的),我的想法是创建一个覆