1.类型标注是什么?为什么要用python的类型标注?

Python 是一种动态类型语言。这意味着 Python 解释器仅在代码运行时进行类型检查。

我们来看一下下面一段简单的例子

def add(a, b):
    return a+b


add(1, "2")

这是一段很简单的整数相加返回和的代码,我们应该传入两个数字进行相加,但是我们传入了一个数字和一个字符串,我们在运行前是看不到任何错误的,当我们运行后会抛出一个异常TypeError: unsupported operand type(s) for +: 'int' and 'str'

当然我们这个程序很简单,一看就知道应该传声明参数,因为它只是一个简单的整数相加程序,但是如果我们写了一个复杂的函数在大型项目时,在程序运行前就知道自己是否正确的调用了函数,这样我们就需要加上类型标注。

下面时添加了类型的代码和在pycharm的显示

from typing import Union


def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
    return a+b


add(1, "2")

python jieba pos标注 python 类型标注_变量类型

此时我们在还没运行IDE就会自动帮你发现了调用错误,并且用波浪线画出。这就对调用者很友好,可读性强

2.如何使用?

细心的朋友可能发现上述改的代码我新导入了一个typing库,并且加了类型注解的代码比原本长一点

def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
    return a+b

这段代码的意思是a和b的类型是int或者float其中一个,返回的类型是int或者float的其中一个

即使用方法为变量名:变量类型,这个变量类型可以是int,float,str,list,dict,set,turple,但如果你标注的类型比较复杂,有数据结构嵌套数据结构的情况:例如列表里面有一个列表,或者说列表嵌套一个元组或者说你需要选择其中一个类型,这样我们就需要导入一个typing库(3.9版本以后可以不导入直接使用)

下面是类型注解示例:

uion:Uion[int,float]:uion这个变量类型应为int或者float

objecct_list:List[Union[A, B, C]]

from typing import Union, List


class A:
    name: str
    age: int


class B:
    age: int
    name: str


class C:
    age: int
    name: str


object_list: List[Union[A, B, C]]
object_list = [A(), B(), C()]
for object in object_list:
    object.name = "abc"
    object.age = 20
print(object_list)

这段代码的信息量就比较大,List[Union[A, B, C]]的意思是我们的类型需要的是一个列表,列表里面的元素只能是A,B,C这三个类的对象

object_list: Sequence[Union[A, B, C]]:类型为一个元组或者一个对象里面的元素为A,B,C的类型对象

list_dict: List[Dict[str, int]]:列表里面是一个字典,字典的key:value类型为str:int

list_dict: List[Dict[str, int]]
list_dict = [{"1":1}]

3.结语

类型标注给我的感觉就是让代码可读性更强,这个优势在多人协作项目是会被方法

缺点就是代码量会更多,所以在写小脚本时不推荐使用

参考