类型注解-type hint

news2024/9/22 0:53:10

目录

一、基本介绍

1、为什么需要类型注解

2、类型注解作用和说明

二、变量的类型注解

1、基本语法

2、基本数据类型注解

3、实例对象类型注解

4、容器类型注解

5、容器详细类型注解

6、在注释中使用注解

三、函数(方法)的类型注解

1、基本语法

2、代码演示

四、Union类型

1、基本介绍

2、基本语法

3、案例演示


参考文档:术语对照表 — Python 3.12.5 文档



一、基本介绍

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)}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebService基础学习

一、XML回顾 二、HTTP协议回顾 三、复习准备 四、关于Web Service的几个问题 五、Web Service中的几个重要术语 六、开发webservice 七、WebService面试题

python面向对象三大特征之---封装,私有属性和私有方法,property功能; 继承,重写,object类;多态;类的深拷贝和浅拷贝

1.面向对象三大特征 封装 1.类属性的创建: 2.属性的访问: 私有属性和方法在类外访问的方法也有:不推荐 对象名._类名__私有方法() 对象名._类名__私有属性3.property功能 在Python中,property 是一个内置的功能,它…

jar包在linux无法直接获取resources文件夹下的文件

windows下,通过hutool的FileUtil.file()就可以获取到文件,通过MailUtil.send()将邮件带附件的方式成功,携带附件发邮件。 linux下部署,截图中的FileUtil.file()是拿不到文件的,报IOException while sending message&a…

「团结引擎1.2.0」正式上线!功能全面升级

「团结引擎 1.2.0」来啦,继上次大版本更新又过了三个月,这段时间我们的研发团队一直在收集用户反馈,更新引擎功能。 本次技术更新的内容,涵盖了微信小游戏、团结引擎车机版、OpenHarmony、Audio、Virtual Geometry、Open Euler/A…

开发食堂采购系统源码:优化供应链管理APP的技术路径

当下,开发一个食堂采购系统源码,并将其集成到供应链管理APP中,成为了优化供应链管理的关键路径之一。 一、食堂采购系统的需求分析 食堂采购系统是食堂日常运营中不可或缺的工具,其主要功能包括采购需求管理、供应商管理、订单管…

《中国数据库前世今生》——历史的深度与未来的展望

在探索科技与历史的交织中,我有幸观看了《中国数据库前世今生》这部纪录片。影片开头它不仅是一段技术演进的回顾,更是中国IT领域从跟随到引领的壮丽史诗。后续深刻研读了专家们的深刻讨论,通过这部纪录片,我深刻感受到了数据库技…

PMP–知识卡片--沟通模型

沟通过程中,发送方想把自己的想法传递给接收方,需要先对想法进行编码,将其变成语言或文字,再选择传递的方式,过程中会受到噪声的影响。这里的噪声是广义的,包括所有影响信息传递效果的因素,如杂…

《Ubuntu22.04环境下的ROS2学习笔记2》

一、在ROS2环境下创建功能包 如果您已经完成了上一小节的内容,那么接下来您一定渴望自己创建一个功能包来实现相应的功能。在ROS1中,您创建的功能包可以既写C/C,又写python,但ROS2中不允许用户这么做,您的C/C和python代…

UniApp的神器-开启前端开发的全新篇章

本文介绍了DIYGW UniApp可视化工具作为一款低代码开发平台的特点和优势。该工具采用拖拽式设计和模块化开发,能够快速转化想法为可运行应用,并支持多种平台部署。它具有所见即所得的设计体验、丰富的组件库、前后台通信模块和跨平台兼容性等特点。使用该…

netsat -ano 详解

netsat -ano会输出一大堆端口,为什么nmap扫描出来的却只有两个 因为我们的服务器或者工作站有开启防火墙,过滤了nmap的流量,导致nmap扫描不到一些端口,再加上我们的开放端口有一些是只有本地才能访问的 怎么看哪些端口只有本地能…

基于Pytorch深度学习图像处理基础流程框架(以ResNetGenerator为例)

文章目录 - 模型搭建1. 搭建ResNetGenerator2. 网络实例化3.加载预训练模型权重文件4. 神经网络设置为评估模式 预测处理1. 定义图片的预处理方法2. 导入图片3. 预处理图片4. 调用模型5. 输出结果 - 模型搭建 1. 搭建ResNetGenerator import torch import torch.nn as nnclas…

go 调用C语言函数或者库

1.查看cgo是否开启 go env | grep CGO_ENABLED CGO_ENABLED1 2. go程序中加入 import "C" 通过 import “C” 语句启用 CGO 特性后,CGO 会将上一行代码所处注释块的内容视为 C 代码块 单行注释使用// 多行注释使用/* */ 3. go 与C 类型转换 在g…

HSL模型和HSB模型,和懒人配色的Color Hunt

色彩不仅仅是视觉上的享受,它在数据可视化中也扮演着关键角色。通过合理运用色彩模型,我们可以使数据更具可读性和解释性。在这篇文章将探讨HSL(Hue, Saturation, Lightness)和HSB(Hue, Saturation, Brightness&#x…

【机器学习】深度学习实践

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言一、深度学习基础二、图像分类示例三、拓展思考结语 引言 在当今人工智能的浪潮中,深度学习作为其核心驱动力之一,正以前所未有的速度改变着我们的世界。从图像识别、语音…

c语言第18天笔记

构造类型 结构体类型 结构体数组 案例: 需求:对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出 各人得票结果。 ​ /** * 结构体数组案例:对候选人得票的统计程序。设有3个候…

主机组装笔记

参考资源:B站【装机教程】全网最好的装机教程,没有之一,仅供探讨学习 9大部件一览 其中得到固态和机械,是硬盘,存储空间,可以只选固态 CPU,主要有 AMD 和 Intel (AMD,基板的背面布…

力扣 58. 最后一个单词的长度

题目描述 思路 下意识想到先以空格作为分割符对字符串进行分割得到若干个子字符串,然后用字符串长度计算函数计算最后一个子字符串的长度。 该思路代码如下: class Solution:def lengthOfLastWord(self, s: str) -> int:s_array s.split()last_le…

全新在线客服系统源码(pc+h5+uniapp+公众号小程序+抖音)附搭建接入教程

全新在线客服系统源码介绍 一、系统概述与优势 本系统是一款基于PHP的开源在线客服系统,支持PC端、移动端(小程序)、H5页面以及Uniapp多端接入。系统利用网络技术和人工智能技术,实现用户与客服人员的即时聊天沟通,有效提升服务质量和用户满意…

Python+Selenium+Pytest+POM自动化测试框架封装详解

1、测试框架简介 1)测试框架的优点 代码复用率高,如果不使用框架的话,代码会显得很冗余。可以组装日志、报告、邮件等一些高级功能。提高元素等数据的可维护性,元素发生变化时,只需要更新一下配置文件。使用更灵活的…

透明加密软件排行榜前十名(2024年10大好用的透明加密软件推荐)

在当今数字化的时代,数据的安全性和保密性已经成为了企业和个人最为关注的问题之一。随着信息技术的飞速发展,各种数据泄露事件层出不穷,给企业和个人带来了巨大的损失。在这样的背景下,透明加密软件应运而生,成为了保…