【问题标题】:Function annotation with two or more return parameters具有两个或多个返回参数的函数注释
【发布时间】:2019-09-24 15:24:39
【问题描述】:

当我为返回一个参数的函数编写注释时,我没有问题。

def func() -> str:
    return "ok"

但是,当我编写带有两个或更多参数的注释时,我的 PyCharm 给了我SyntaxError: invalid syntax

def func() -> str, str:
    return "ok - 1", "ok - 2"

我认为参数可以与tuple 组合,但我认为这不是最好的方法。

我的问题是:如何正确地注释具有两个或多个返回参数的函数?

请在您的回复中包含 PEP 链接(如果有)。我在PEP 484PEP 3107 寻找答案,但找不到。

【问题讨论】:

标签: python python-3.x type-hinting


【解决方案1】:

使用typing.Tuple:

from typing import Tuple

def func() -> Tuple[str, str]:
    return 'a', 'b'

这是合适的,因为从概念上讲,您实际上是返回一个包含这些值的 tuple。注意:

print(type(func()))

输出:

<class 'tuple'>

除了空的tuple (()),parentheses are not necessary to define a tuple,这意味着'a', 'b' 被创建为tuple,而不是被return 语句收集到一个单独的值。

【讨论】:

  • Tuple 是合理的。 in some cases 可能过于严格,但据我所知,如果没有不同的权衡,没有更好的选择。
  • @kojiro 在我看来,这不适用于返回值...?
  • 我认为它仍然适用。签名的主要内容不是函数本身返回一个元组,而是它返回一个具有特定长度的 unpackable。有很多序列类型是不可打包的,但没有通用的不可打包类型也有长度和内部类型说明符。元组可以指定所有内容,但过于严格。
  • @kojiro 我可能会误会你,但是具有多个返回值的函数特别地返回tuple,而不是具有单个返回值的函数值也恰好是一个知道其长度和元素类型的不可打包对象,需要这样的说明符吗?
  • 元组仍然是一个碰巧不可打包的对象。这就是我要说的。没有办法表示 python 从函数返回多个值,因为 python 不能从函数返回多个值。但它可以返回一个序列,元组是一种序列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 2014-06-23
  • 2013-10-04
  • 1970-01-01
  • 2015-11-22
相关资源
最近更新 更多