前言时刻:
使用类型标注有哪些好处?
- 避免遗忘,通过事先标注好的变量类型,利于回忆。
- 简单明了,代码利于观看和维护
1. 简单数据类型标注
def func(a: int, b: str) -> str: msg = f"欢迎 {a} 号同学,姓名:{b}" return msg func(1, "小章") func(1, 666) # 这个也是能正常运行的
添加类型提示后,只做提示所用,而并不做严格的语义校验,这点是真的挺好。
2. list、tuple、dict中类型标注
# list、tuple、dict 中添加类型标注 # python 3.9 后无需从typing 中导入这些包,只需要换成小写的就行。例如:lis: list[int] from typing import List, Tuple, Dict def func(lis: List[int], tup: Tuple[int], dic: Dict[str, int]): sum_ = 0 for i in lis: sum_ += i return sum_ func([1, 2, 3], (1, 2, 3), {"number": 1}) # 6 # func([1, 2, "3"], (1, 2, "3"), {1: "number"}) 会提示类型不对应,但是可以正常运行
解释下:
- Dict[type1, type2]:type1是 key 的数据类型,type2 是 value 的数据类型
- List 和 Tuple 中只能指定一个数据类型,既:List[str],而不能是List[str, int] 等
3. List 和 Tuple 等序列类型混着传
此时就可使用更加上层的 Sequence
来支持序列性的变量类型。
from typing import Sequence def func(lis: Sequence[int]) -> int: sum_ = 0 for i in lis: sum_ += i return sum_ func([1, 2, 3]) # 6 func((1, 2, 3)) # 6 func(range(1, 4)) # 6
4. 或
使用 Union
,或的意思,支持标注多个类型,彼此之间是或的关系
# 添加多个类型,或 的关系 from typing import Union, Optional def func(lis: Union[int, str, None]) -> int: return 1 func([1, "str", None])
总结:
非常建议尝试用一下,实际项目中很受益~
参考文章: