类型注解 Why&What
为什么要使用类型注解
- 当我们调用random模块中的randint方法时,将光标置于括号中查看提示会显示

显然它的意思是说我们要传入一个整数int参数
- 但当我们自己定义一个函数时,提示却只告诉我们任何参数
any,如果这个函数是用来进行特定操作的话就容易弄错传参类型,

什么是类型注解
Python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。
类型注解: 在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。
主要功能:
- 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
- 帮助开发者自身对变量进行类型注释
支持:
- 变量的类型注解
- 函数(方法)形参列表和返回值的类型注解
类型注解注释一个提高代码可读性的备注,写错了也不影响程序的实际运行。
变量的类型注解
基础语法:变量:类型
基础数据类型注解
1
2
3
4
|
name: str = '小明'
age: int = 10
if_student: bool = True
average_money: float = 10.445
|
基础数据类型注解
1
2
3
|
class Student:
pass
stu: Student = Student()
|
基础容器类型注解(简易)
简易版就是只注解容器的类型
1
2
3
4
5
|
my_list:list = [1,2,3]
my_tuple:tuple = (1,2,3)
my_set:set = {1,2,3}
my_dict:dict = {'retr0':123}
my_str:str = 'retr0'
|
基础容器类型注解(详细)
1
2
3
4
|
my_list:list[int] = [1,2,3]
my_tuple:tuple[str,int,boll] = ('retr0',1,True)
my_set:set[int] = {1,2,3}
my_dict:dict[str,int] = {'retr0':123}
|
详细注解需要注解容器内部元素的类型,并且注意:
- 元组类型设置详细注解,需要将每一个元素都标记出来
- 字典类型设置详细注解,需要两个类型,第一个是key第二个是value
其他语法格式
还有一种注解方法就是在对应行的注释中进行类型注解,语法:# type:类型
1
2
3
4
5
6
|
a = random.randint(1,10) # type:int
# 指返回的结果是整数
b = json.loads(data) # type:dict[str,int]
# 指返回的结果是字典
c = func() # type:Student
# 指返回的结果是Student的类对象
|
并且实际上一般情况下我们不用特别对变量进行注解(毕竟我们也能一眼看出来到底是什么数据类型),真正需要注解的就是像上面这种的隐式变量,因为我们无法直接看出其数据类型。
函数和方法的类型注解
函数(方法)的类型注解 — 形参注解
语法:
1
2
|
def 函数方法名(形参名:类型,形参名:类型):
示例语句
|
QuickStart:
1
2
3
4
5
|
def add(x:int,y:int):
return x + y
def func(data:list):
pass
|
函数(方法)的类型注解 — 返回值注解
语法:
1
2
|
def 函数方法名(形参名:类型,形参名:类型) -> 返回值类型:
示例语句
|
QuickStart:
1
2
3
4
5
|
def add(x:int,y:int) -> int:
return x + y
def func(data:list) -> list:
data.append('test')
return data
|
Union联合类型注解
为什么要有Union类型注解?
如果数据容器是下面这样的,你还好进行一般注解吗?
1
2
|
my_list = [1,2,'retr0','hello']
my_dict = ['name':'retr0','age':18]
|
使用方法
首先导入Union包from typing import Union
语法:Union[类型,类型,......,类型]
演示:变量注解
1
2
3
|
from typing import Union
my_list: list[Union[int,str]] = [1,2,'retr0','hello']
my_dict:dict[str,Union[str,int]] = ['name':'retr0','age':18]
|
演示:返回值注解
1
2
3
|
from typing import Union
def func(data:Union[int,str]) -> Union[int,str]:
pass
|