基本使用
昨天刷知乎的时候偶然刷到了 Python3.5 引入的新特性 typing 可以增强 IDE 或则编辑器对类型的推断。由于 python 本身是一种动态类型语言,因此在某些不知道变量类型的时候编辑器无法给出提示,下面涉及到的编辑器都为vscode。例如:
1 | def trimString(string): |
由于不知道参数 string 的类型,在按下 string. 的时候 vscode 无法给出关于 string 的方法提示。但是如果采用 typing 的写法:
1 | def tringString(string:str)->str: |
这样就能在输入 string. 的时候提示出 str 类型的方法。
type
对于 Python 自带的类型,python 都放在 typing 包里可以引入,例如:
1 | from typing import List,Dict |
更多的类型请参照官网给出的例子。
泛型
当然有了类型之后就要有泛型,当然我不知道这个是否应该称之为泛型,因为实际上type hints 故名思意只是为了 hint ,而不提供类型检查。可以通过 TypeVar 实现类似泛型的概念:
1 | from typing import TypeVar,List |
DataClass
在 scala 中提供了 case class 来满足我们只想用来保存数据,而不需要方法的类。而最近在 pyhon 3.7 中也增加了 @DataClass 的装饰器来支持。但是在 Python 3.7之前也可以通过 collections.namedtuple 来实现曲线救国。而还有一种方法就是使用 typing.NamedTuple。例如:
1 | from typing import NamedTuple |
等价于:
1 | Employee = collections.namedtuple('Employee', ['name', 'id']) |
官方文档
这里只给出了一些常用的方式,更多的请参考官方文档: