类型注解
什么是类型注解
在代码中涉及数据交互之时, 对数据类型进行显示的说明, 可以帮助:
- PycCharm 等开发工具对代码做类型推断协助做代码提示
- 开发者自身做类型的备注
类型注解支持:
变量的类型注解
函数(方法) 的形参和返回值的类型注解
类型注解只是提示性的, 并非决定性的, 数据类型和注解类型无法对应也不会导致错误
为变量设置类型注解
基础语法:
python
变量: 类型
var_1: int = 10
var_2: float = 2.32
var_3: bool: True
var_4: str = "hello world"
类对象类型注解
python
class Student:
pass
stu: Student = Student()
基础容器类型注解
python
my_list: list = (1, 2, 3)
print(my_list)
print(type(my_list)) # <class 'tuple'>
my_set: set = {1, 2, 3}
my_dict: dict = {"hello": "world"}
类型注解只是给人 / IDE 看的提示,不会强制转换数据。
容器类型详细注解
python
# 容器类型详细注解
my_list: list[int] = [1, 2, 3]
my_tuple: tuple[str, int, bool] = ("hello", 666, True)
my_tuple1: tuple[int, ...] = (666, 43)
my_set: set[int] = {1, 2, 3}
my_dict: dict[int, int] = {1: 3, 32: 8}
注意: 元组类型设置类型详细注解, 需要将每一个元素都标记出来
字典类型设置类型详细注解, 需要两个类型, 第一个是 key, 第二个是value
函数(方法) 的类型注解
形参注解
函数和方法的形参类型注解语法:
python
def 函数方法名: (形参名: 类型, 形参名: 类型, ......):
pass
例如:
python
def add(x: int, y: int):
return x + y
def func(data: list):
pass
有了类型注解之后, 在调用的时候就可以帮助我们提示参数的类型
返回值注解
函数(方法) 的返回值也是可以添加类型注解的
语法:
python
def 函数方法名(形参: 类型, ......, 形参: 类型) -> 返回值类型:
pass
例如:
python
def func(data: list) -> list:
return data
在注释中进行类型注解
除了使用 变量: 类型, 这种语法外, 也可以在注释中进行类型注解
语法:
python
#type 类型
python
class Student:
pass
var_1 = random.randint(1, 10) # type: int
var_2 = json.loads(data) # type: dict[str, int]
var_3 = Student() # type: Student
Union类型
python
my_list = [1, 2, "hello", "xinyan"]
my_dict = {"name": 'xinyan', "age": 18}
当我们遇到上面这中代码,要进行类型注解, 就不太好描述
这时候就需要用到 Union 类型了
使用Union类型首先要导入对应的包:
python
form typing import Union
python
from typing import Union
my_list: list[Union[str, int]] = [1, 2, "hello", "xinyan"]
my_dict: dict[str, Union[str, int]] = {"name": 'xinyan', "age": 18}
Union 联合类型注解, 在变量注解, 函数(方法) 形参和返回值注解中, 均可以使用
python
def func(data: Union[int, str])->Union[int, str]:
return data