【问题标题】:Typing - function return value type same as a type of an expressionTyping - 函数返回值类型与表达式类型相同
【发布时间】:2019-01-23 07:15:43
【问题描述】:

考虑代码:

def foo() -> ??:
     return bar()

我如何说我希望foo 的返回类型与bar() 的返回类型相同?

在 C++ 中,我可以使用 decltype,类似于:

auto foo() -> decltype(bar()) {
    return bar();
}

我找不到 Python 的等价物。有吗?

【问题讨论】:

  • 您需要显式类型吗?没有它会推断什么?
  • @jonrsharpe 我做了测试,你是对的 - 它看起来推断出正确的类型(至少就我的编辑器中的语法完成而言)。

标签: python python-3.x python-typing


【解决方案1】:

如果定义了bar,则可以访问其签名

In [1] from inspect import signature

In [2]: def bar(a: int) -> float: 
   ...:     return float(a)                                         
   ...:                                                             

In [3]: def foo(a: int) -> signature(bar).return_annotation: 
   ...:     return bar(a)                                           
   ...:                                                             

In [4]: signature(foo)                                              
Out[4]: <Signature (a: int) -> float>        

话虽如此,我不确定你是否需要这样做来进行静态类型检查,因为可以从bar 推断出foo 的返回类型(至少 PyCharm 的静态分析器倾向于这样做那个)。

【讨论】:

    【解决方案2】:

    Python 的内置类型库支持创建custom types,您可以描述一个新的类型类并将这两个函数与该类耦合作为返回值。

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2014-05-13
      相关资源
      最近更新 更多