目录
![](https://i-blog.csdnimg.cn/direct/7ac408b6a2984b5abd3ab537f685e6d5.png)
一、基本介绍
1、为什么需要类型注解
1)随着项目越来越大,代码也就会越来越多,在这种情况下,如果没有类型注解,很容易不记得某个方法的参数类型是什么
2)一旦传入了错误类型的参数,Python是解释性语言,只有在运行时才能发现问题,这对大型项目来说是一个巨大的灾难
# 对字符串进行遍历
# a:str 给形参a进行类型注解,标注a的类型是str
def fun1(a: str):
for ele in a:
print(ele)
# ctrl+p提示参数时,没有类型提示
# 如果类型传错了,就会出现异常
fun1("100")
2、类型注解作用和说明
自从python3.5开始,引入了类型注解机制,作用和说明如下:
1)类型提示,防止运行时出现参数类型、返回值类型、变量类型不符合
2)作为开发文档附加说明,方便使用者调用时传入和返回参数类型
3)加入后并不会影响程序的运行,不会报正式的错误,只是提醒
4)pycharm支持类型注解,参数类型错误会黄色提示
二、变量的类型注解
1、基本语法
变量:类型
2、基本数据类型注解
# 基本数据类型注解
n1:int=10
n2:float=10.1
is_pass:bool=True
name:str="jack"
3、实例对象类型注解
# 实例对象类型注解
class Cat:
pass
cat:Cat=Cat()
4、容器类型注解
# 容器类型注解
my_list:list=[100,200,300]
my_tuple:tuple=("run","sing","fly")
my_set:set={"jack","tom","jim"}
my_dict:dict={"no1":"北京","no2":"上海"}
5、容器详细类型注解
# 容器详细类型注解
# 对元素类型进行标注
my_list2:list[int]=[100,200,300]
# 对每一个元素类型进行标注
my_tuple2:tuple[str,str,str,float]=("run","sing","fly",1.1)
# 对元素类型进行标注
my_set2:set[str]={"jack","tom","jim"}
# 对元素类型进行标注 dict[str,int] key为str,value为int
my_dict2:dict[str,int]={"no1":100,"no2":200}
6、在注释中使用注解
基本语法
# type:类型
# 在注释中使用注解
n3=89.9 # type:float
my_list3=[100,200,300] # type:list[int]
email="cx@qq.com" # type:str
三、函数(方法)的类型注解
1、基本语法
def 函数/方法名(形参名:类型,形参名:类型...)->返回值类型:
函数/方法体
2、代码演示
# 对字符串进行遍历
"""
解读:
1、name:str 对形参name进行类型注解,标注name类型是str
2、在调用方法/函数时,传入的实参类型是不一致的,则给出黄色警告
"""
def fun1(name: str):
for ele in name:
print(ele)
fun1("tom")
# 接收两个整数,返回整数
"""
1、a:int,b:int 对形参a和b进行类型注解,标注a,b的类型是int
2、->int 对返回值进行类型注解,标注返回值的类型是int
"""
def fun2(a:int,b:int)->int:
return a+b
print(f"结果是:{fun2(10,20)}")
说明:类型注解是提示性的,并不是强制性的,如果你给的类型和指定/标注的类型不一致,PyCharm检测到会给出黄色警告,但是仍然可以运行
def fun2(a:int,b:int)->int:
return a+b
print(f"结果是:{fun2(10.1,20)}")
四、Union类型
文档:typing —— 对类型提示的支持 — Python 3.12.5 文档
1、基本介绍
1)Union类型可以定义联合类型注解
2)在变量、函数(方法)都可以使用Union联合类型注解
3)使用的时候,需要先导入Union:from typing import Union
2、基本语法
Union[类型,类型...]
比如:联合类型:Union[X,Y]等价于X|Y,意味着满足X或Y之一
3、案例演示
# 如果要使用Union类型注解,则需要导入Union
from typing import Union
# 联合类型注解,a可以是int或str
a:Union[int,str]=100
# my_list是list类型,元素可以是int或str
my_list:list[Union[int,str]]=[100,200,300,"tim"]
# 函数/方法使用联合类型注解
# 接收两个数(可以是int/float),返回数(int/float)
def cal(num1:Union[int,float],num2:Union[int,float])->Union[int,float]:
return num1+num2
print(f"结果是:{cal(10,20.5)}")