【问题标题】:What does the -> (dash-greater-than arrow symbol) mean in a Python method signature? [duplicate]Python 方法签名中的 ->(破折号大于箭头符号)是什么意思? [复制]
【发布时间】:2015-10-05 09:33:41
【问题描述】:

在 python 方法的末尾有一个-> 或破折号大于符号,我不确定它的含义。也可以称之为箭头。

示例如下:

@property
def get_foo(self) -> Foo:
    return self._foo

self._foo 是 Foo 的一个实例。

我的猜测是它是某种静态类型声明,告诉解释器self._foo 是 Foo 类型。但是当我对此进行测试时,如果self._foo 不是 Foo 的实例,则不会发生任何异常情况。此外,如果self._foo 不是 Foo 的类型,假设它是int,那么type(SomeClass.get_foo()) 返回int。那么,-> Foo 的意义何在?

这个概念很难查找,因为它是一个没有通用名称的符号,而且“箭头”一词具有误导性。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    这是function annotations。它可用于将附加信息附加到argumentsreturn values 函数。这是一种说明必须如何使用函数的有用方式。 函数注解存储在函数的__annotations__ 属性中。

    Use Cases (From documentation)

    • 提供打字信息

      • 类型检查
      • 让 IDE 显示函数期望和返回的类型
      • 函数重载/泛型函数
      • 外语桥梁
      • 适应
      • 谓词逻辑函数
      • 数据库查询映射
      • RPC 参数封送处理
    • 其他信息

      • 参数和返回值的文档

    来自python-3.5 可用于Type Hints

    【讨论】:

    • 我的头脑彻底崩溃了!
    • 这里要补充的一件好事是,它们是改变程序的功能还是仅仅是注释?如果你不遵守注解中的规则,你的程序会抛出错误吗?
    • 答案中的示例会很棒
    猜你喜欢
    • 2013-04-23
    • 2015-02-11
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多