13

我一直听到类型提示将如何成为 3.5 中的新功能,但这让我想知道箭头指示符 (->) 在 3.3 中是什么?

您可以在此处的 3.3 语法规范中看到它,这是我从2 年前提出的这个问题中找到的。

我想知道,以前是否存在类型提示,但以有限的方式存在,并且 3.5 带来了更多的主要支持?还是我对类型提示的理解不正确,它实际上意味着别的?

4

1 回答 1

20

->用于注释。_ 注释的用例之一是类型提示。

Python 3.0 添加了注释,Python 3.5 通过引入类型提示、标准化该功能来构建该功能。

相关的 PEP(Python 增强提案)是:

注释只是语法,类型提示是特定功能

您可以将语法用于您喜欢的任何内容,例如内联文档:

def documentation(self: "the instance", arg1: "first argument") -> "nothing is returned":
    pass

语法所做的只是将您提供的额外信息附加到函数对象:

>>> def documentation(self: "the instance", arg1: "first argument") -> "nothing is returned":
...     pass
... 
>>> documentation.__annotations__
{'return': 'nothing is returned', 'arg1': 'first argument', 'self': 'the instance'}

类型提示规范指定了如何使用这些注释来说明每个参数应该是什么类型以及返回什么。它是注释的特定应用,因为它定义了如何解释注释。

类型提示 PEP 明确指出它并不是注解的唯一用途:

请注意,此 PEP 仍然明确不阻止注释的其他用途,也不要求(或禁止)任何特定的注释处理,即使它们符合本规范。它只是实现了更好的协调,就像 PEP 333 对 Web 框架所做的那样。

类型提示仍然是完全可选的,您不需要也永远不会使用它。再次引用 PEP:

虽然提议的类型模块将包含一些用于运行时类型检查的构建块——特别是get_type_hints()函数——但必须开发第三方包来实现特定的运行时类型检查功能,例如使用装饰器或元类。使用类型提示进行性能优化留给读者作为练习。

还应该强调的是,Python 仍将是一种动态类型的语言,作者不希望强制类型提示,即使按照惯例也是如此。

强调原文。

您可以安装该typing模块以将类型提示添加到早期的 Python 3.x 版本。

于 2015-06-24T14:28:37.287 回答