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

时间:2015-06-24 14:27:47

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

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

您可以在我3.3 grammar spec here,

找到的this question asked 2 years ago.中看到它

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

1 个答案:

答案 0 :(得分:12)

->用于注释pyOpenSSL是类型提示。

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'}

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

类型提示PEP明确声明它并不是唯一的注释用法:

  

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

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

  

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

     

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

强调原作。

您可以安装PEP 484 Type Hints以向早期的Python 3.x版本添加类型提示。