28.类型注解

变量类型注解

类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显示的说明)

主要功能:

  • 帮助第三方IDE工具对代码进行类型推断,协助做代码提示
  • 帮助开发者自身对变量进行类型注释

支持:

  • 变量的类型注解
  • 函数(方法)形参列表和返回值的类型注解

为变量设置类型注解语法:

  • 变量:类型

注意:

  • 元组类型设置类型详细注解,需要将每一个元素都标记出来
  • 字典类型设置类型详细注解,需要2个类型,第一个是key的类型,第二个是value的类型

除了使用 变量:类型,这种语法注解外,也可以在注释中进行类型注解

  • 语法:# type: 类型

显示的变量定义,一般地需注解,无法直接看出变量类型之时一般会添加变量的类型注解

类型注解的限制:

  • 并不会真正的对类型做验证和判断
  • 类型注解仅仅是提示性的,不是决定性的
# 基础数据类型注解

var1: int = 10
var2: float = 3.1415926
var3: bool = True
var4: str = "itheima"

# 类对象类型注解
class Student:
    pass

stu: Student = Student()

# 基础容器类型注解
my_list: list = [1, 2, 3]
my_tuple: tuple = (1, 2, 3)
my_set: set = {1, 2, 3}
my_dict: dict = {"itherma": 666}
my_str: str = "ITHEIMA"

# 容器类型详细注解
my_list: list[int] = [1, 2, 3]
my_tuple: tuple[str, int, bool] = ("itheima", 666, True)
my_set: set[int] = {1, 2, 3}
my_dict: dict[str, int] = {"itheima", 666}
class Student:
    pass

def func():
    return 10

import random, json

var1 = random.randint(1, 10)                # type: int
var2 = json.loads('{"it": 666}')            # type: dict[str, int]
var3 = func()                               # type: int

函数(方法)的类型注解

形参注解

def func(data):

  data.append|

func()

如上述函数所示:在定义函数(方法)的时候,没有给形参进行注解

  • 在编写函数(方法),使用形参data的时候,工具没有任何提示
  • 在调用函数(方法),传入参数的时候,工具无法提示参数类型

函数和方法的形参类型注解语法:

def 函数方法名(形参名: 类型, 形参名: 类型,......):

  pass

# 对形参进行类型注解
def add(x: int, y: int):
    return x + y

print(add(3, 3))

def func(data: list):
    pass

func([1, 2])
6

返回值注解

同时,函数(方法)的返回值也是可以添加类型注解的

语法如下:

def 函数方法名(形参: 类型,......, 形参: 类型) -> 返回值类型:

  pass

# 返回值注解
def func(data: list) -> list:
    return data

func([1, 2])
[1, 2]

Union类型

对于混合类型的数据类型,可以定义联合类型注释

使用 Union[类型,......,类型]

Union 联合类型注解,在变量注解、函数(方法)形参和返回值注解中,均可使用

from typing import Union

my_list: list[Union[str, int]] = [1, 2, "itheima", "itcast"]
my_dict: dict[str, Union[str, int]] = {"name": "堂", "age": 18}

def func(data: Union[str, int, list]) -> Union[int, str, list]:
    return data

func([1, 2])
func("tang")
'tang'