3.3和3.5中的类型提示有什么区别?

bob*_*bob 7 python type-hinting python-3.x python-3.5

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

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

我想知道,之前是否存在类型暗示,但是以有限的方式,3.5正在带来更多的主要支持?或者我对类型提示的理解不正确,它实际上意味着什么呢?

Mar*_*ers 12

->用于注解.注释的一个用例是类型提示.

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

相关的PEP(Python增强建议)是:

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

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

def documentation(self: "the instance", arg1: "first argument") -> "nothing is returned":
    pass
Run Code Online (Sandbox Code Playgroud)

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

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

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

Type Hinting PEP明确声明它并不是注释的唯一用途:

请注意,此PEP仍然明确不会阻止其他注释使用,也不会要求(或禁止)任何特定的注释处理,即使它们符合此规范.它简单地实现了更好的协调,正如PEP 333为Web框架所做的那样.

类型提示仍然是完全可选的,它不是也不需要你使用它.再次引用PEP:

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

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

强调原作.

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