Python3类型注释:学习笔记与要点整理
普通的注释
在声明变量类型时,变量后方紧跟一个冒号,冒号后面跟一个空格,再跟上变量的类型。
在声明方法返回值的时候,箭头左边是方法定义,箭头右边是返回值的类型,箭头左右两边都要留有空格
1
2
3name: str = "jack"
def greeting(name: str) -> str:
return 'Hello ' + name
typing模块的使用
List 列表,是 list 的泛型
Tuple 元组,是 tuple 的泛型
Dict 字典,是 dict 的泛型
Set 集合,是 set 的泛型
Sequence:
Sequence,是 collections.abc.Sequence 的泛型,在某些情况下,我们可能并不需要严格区分一个变量或参数到底是列表 list 类型还是元组 tuple 类型,我们可以使用一个更为泛化的类型,叫做 Sequence
泛型(Generic):
由于无法以通用方式静态推断有关保存在容器中的对象的类型信息,因此抽象基类已扩展为支持订阅以表示容器元素的预期类型。
1 |
|
类型别名
1 | from typing import List |
用户定义的泛型类型
1 | from typing import TypeVar, Generic |
Any
Any,是一种特殊的类型,它可以代表所有类型,静态类型检查器的所有类型都与 Any 类型兼容,所有的无参数类型注解和返回类型注解的都会默认使用 Any 类型
NewType
NewType,我们可以借助于它来声明一些具有特殊含义的类型,例如像 Tuple 的例子一样,我们需要将它表示为 Person,即一个人的含义,但但从表面上声明为 Tuple 并不直观,所以我们可以使用 NewType 为其声明一个类型.
1 | Person = NewType('Person', Tuple[str, int, float]) |
Union
Union,联合类型,Union[X, Y] 代表要么是 X 类型,要么是 Y 类型
1 | def process(fn: Union[str, Callable]): |
Callable
期望特定签名的回调函数的框架可以将类型标注为 Callable[[Arg1Type, Arg2Type], ReturnType]
1 | from typing import Callable |
Typing.Optional类
可选类型,作用几乎和带默认值的参数等价,不同的是使用Optional会告诉你的IDE或者框架:这个参数除了给定的默认值外还可以是None,而且使用有些静态检查工具如mypy时,对 a: int =None这样类似的声明可能会提示报错,但使用a :Optional[int] = None不会。
