标准多项集的标注方式
发布于 | 2024-01-31 17:13 | ||
保质期 | 2034-01 | ||
新鲜度 | 90% |
备注
Python 3.9 之前,内置数据类型不支持下标操作,像 list[]
要用 typing.List[]
代替,其余类型同理。但如果需要跨版本,可以用 from __future__ import annotations
实现向前兼容。
列表、集合、不可变集合
标注时只提供一个参数:
python
list01: list[int] = []
list02: list[int] = [0]
list03: list[int] = [0, 1, 2, -1]
set01: set[int] = set()
set02: set[int] = {0}
set03: set[int] = {0, 1, 2, -1}
对于多种类型,需要通过 typing.Union[A, B]
或者 A | B
的形式进行联合:
python
list04: list[int | str] = []
list05: list[int | str] = [0]
list06: list[int | str] = ["meow"]
list07: list[int | str] = [0, "meow", 1, 2]
set04: set[int | str] = set()
set05: set[int | str] = {0}
set06: set[int | str] = {"meow"}
set07: set[int | str] = {0, "meow", 1, 2}
对于任意类型,两种标注是等价的:
python
import typing
list08: list = [0, "meow", 1, 2]
list09: list[typing.Any] = [0, "meow", 1, 2]
set08: set = {0, "meow", 1, 2}
set09: set[typing.Any] = {0, "meow", 1, 2}
字典
字典的标注只使用两个参数,第一个表示键的类型,第二个表示值的类型。
python
dict01: dict[int, str] = {}
dict02: dict[int, str] = {200: "OK"}
dict03: dict[int, str] = {200: "OK", 404: "Not Found"}
对于多种类型,需要通过 typing.Union[A, B]
或者 A | B
的形式进行联合,类似于列表。
对于任意键值类型,以下两种标注是等价的:
python
import typing
dict04: dict = {200: "OK", "OK": 200}
dict05: dict[typing.Any, typing.Any] = {200: "OK", "OK": 200}
元组
元组的标注与实际值需要一一对应:
python
tuple01: tuple[()] = ()
tuple02: tuple[int] = (0,)
tuple03: tuple[int, int] = (0, 1)
tuple04: tuple[int, int, str] = (0, 1, "meow")
tuple05: tuple[int, int, str, int] = (0, 1, "meow", 2)
对于任意长度的值,需要按照 tuple[TYPE, ...]
的形式进行标注:
注意
这里不是表示 tuple[TYPE, TYPE, TYPE, ……]
,...
本身就是一个字面值。
python
tuple06: tuple[int, ...] = ()
tuple07: tuple[int, ...] = (0, 1)
tuple08: tuple[int, ...] = (0, 1, 2)
对于多种类型的任意长度元组,需要通过 typing.Union[A, B]
或者 A | B
的形式进行联合:
python
tuple09: tuple[int | str, ...] = (0, 1, "meow", 2)
对于任意类型的任意长度元组,以下两种标注是等价的:
python
import typing
tuple0A: tuple = (0, 1, "meow", 2)
tuple0B: tuple[typing.Any, ...] = (0, 1, "meow", 2)