在python 3.x中,通常使用函数的返回类型注释,例如:
def foo() -> str:
return "bar"
“void”类型的正确注释是什么?
我正在考虑三种选择:
def foo()-
使用我所知道的最好的语法来获取 NoneType
,
< li >省略显式返回类型信息。
选项2对我来说似乎是最合乎逻辑的,但我已经看到了1的一些实例。
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日
这直接来自 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”(不是用斜体写的),我的想法是创建一个覆