python基础语法学习: 类型注解

类型注解

什么是类型注解

在代码中涉及数据交互之时, 对数据类型进行显示的说明, 可以帮助:

  • 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 
相关推荐
m0_3807438735 分钟前
PHP7.3和7.2字符串功能有什么不同
开发语言·php
FYKJ_201038 分钟前
SSM校园失物招领系统41452-计算机课程设计、毕业设计
java·vue.js·spring boot·python·mysql·typescript·spark
每天题库1 小时前
危险货物道路运输从业资格证题库刷题重点与错题梳理
学习·安全·考试·题库·考证
m0_380743871 小时前
PHP 8.4的新语法怎么用才规范
开发语言·php
头发够用的程序员1 小时前
TensorRT 自定义算子插件实战(一):从零手写 customScaledTanh
c++·人工智能·pytorch·python·深度学习·边缘计算·jetson
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(86):Skill-Pro——用 Non-Parametric PPO 将交互经验演化为可复用技能
论文阅读·人工智能·学习·开源·github
阿狗童鞋1 小时前
Java并发编程实战指南
java·开发语言
xiaoqi01951 小时前
期货量化软件回测方式深度横评:期魔方、文华财经、无限易、TB开拓者、金字塔全面对比
python·机器学习
AOI小白新手上路1 小时前
从 Keil 调试视角看 51 指针,到 Cortex-M 内存映射访问寄存器 · 学习笔记
笔记·学习
别动我齐刘海1 小时前
简历技术栈全面复习——UDP / TCP / CAN / ZMQ / Protobuf 通信工程
网络·c++·python·tcp/ip·机器学习·udp·github