Python类型标注笔记

4,071次阅读
没有评论

前言时刻:

使用类型标注有哪些好处?

  1. 避免遗忘,通过事先标注好的变量类型,利于回忆。
  2. 简单明了,代码利于观看和维护

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]) 

总结:

非常建议尝试用一下,实际项目中很受益~

参考文章:

https://www.bilibili.com/video/BV11Z4y1h79y

2
西园公子
版权声明:本站原创文章,由西园公子2022-06-11发表,共计1005字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...