当前位置: 首页 > 面试题库 >

如何注释多个返回值的类型?

汪文光
2023-03-14
问题内容

我如何使用类型提示来注释一个返回Iterable总是返回两个值的函数:abool和a str?提示Tuple[bool, str]很接近,除了将返回值类型限制为元组,而不是生成器或其他可迭代类型。

我主要是好奇的,因为我想注释一个foo()用于返回多个值的函数,如下所示:

always_a_bool, always_a_str = foo()

通常函数喜欢foo()做这样的事情return a, b(它返回一个元组),但我喜欢的类型暗示要足够灵活,以取代发电机或列表或别的东西返回的元组。


问题答案:

您总是返回 一个 对象;使用return one, two只需返回一个元组。

是的,-> Tuple[bool, str]完全正确。

只有Tuple类型可以指定一个 固定数量 的元素,每一个不同的类型。如果您的函数产生 固定
数量的返回值,尤其是当这些值是特定的,不同的类型时,确实应该总是返回一个元组。

期望其他序列类型具有可变数量元素的 _一种_类型规范,因此typing.Sequence此处不适用。另请参阅列表和元组之间有什么区别?

元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同类序列。 元组具有结构,列表具有顺序。

Python的类型提示系统遵循这种哲学,目前尚无语法来指定固定长度的可迭代对象,并在特定位置包含特定类型。

如果 必须 指定任何可迭代的对象,那么最好的方法是:

-> Iterable[Union[bool, str]]

在这一点上,调用者可以期望布尔值和字符串 以任意顺序 ,并且长度未知(0到无穷大之间)。



 类似资料:
  • 问题内容: 在Java中是否可以从方法返回两个或多个值到main?如果是这样,有可能吗?如果没有,我们怎么办? 问题答案: 你可以使用Java返回Class的对象。 如果要返回多个相关的值,则将它们封装到一个类中,然后返回该类的对象是有意义的。 如果要返回不相关的值,则可以使用Java的内置容器类(例如Map,List,Set等)。有关更多详细信息,请检查java.util包的JavaDoc。

  • 在python 3.x中,通常使用函数的返回类型注释,例如: “void”类型的正确注释是什么? 我正在考虑三种选择:

  • 这是简化的代码 那么如何在类型注释中使用名称Myclass呢?我的TypeScript版本是3.2.2

  • 功能注释:PEP-3107 背景:我是PyCharm用户,在Linux上拥有CPython 3.4x。我发现注释函数参数和返回类型很有帮助。当我使用这些方法时,IDE可以更好地提示我。 问题:对于自链接方法,如何注释方法返回值?如果我使用类名,Python会在编译时抛出一个异常: 示例代码: 作为一个技巧,如果我把放在类声明的前面,它就会起作用。然而,我不知道这种技术是否有意想不到的负面副作用。

  • 问题内容: 选项:使用元组 考虑下面这个简单的例子: 但是,随着返回值的数量增加,这很快就会成为问题。如果要返回四个或五个值怎么办?当然,你可以继续修改它们,但是很容易忘记哪个值在哪里。在任何想要接收它们的地方打开它们的包装也是很丑陋的。 选项:使用字典 下一步的逻辑步骤似乎是引入某种“记录符号”。在Python中,一种明显的方法是使用dict。 考虑以下: (请注意,y0,y1和y2只是抽象标识

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