Chapter 29 类型注解

news2024/9/21 4:30:56

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!

文章目录

  • 前言
  • 一、变量的类型注解
  • 二、函数的类型注解
  • 三、Union类型注解


前言

类型注解为我们提供了一种清晰的方式来描述变量和函数的预期类型,使得代码的意图更加明确。本章详细讲解了类型注解在 Python 中的使用,包括变量和函数的类型注解。


本篇文章参考:黑马程序员

一、变量的类型注解

在PyCharm中编写代码,我们经常能够见到如下提示:
在这里插入图片描述
PyCharm自动提示了list对象的append()方法。这是因为 PyCharm 等现代 IDE 能通过类型注解和静态分析来推断变量的类型,这种推断可以帮助 IDE 确定某个对象所具有的方法和属性,从而提供适当的代码补全和自动提示功能。在这段代码中 PyCharm 确定这个对象为 list 类型,分析了 list 类的定义,知道其包含 append() 方法,所以能提供自动提示。

然而,当我们定义一个接收参数的函数,比如func(data)时,PyCharm没有提供任何提示。在这里插入图片描述
这是因为此时PyCharm不确定data的具体类型,因此无法推断出它能够调用的方法或属性。

另外,当我们调用内置模块random的方法并传入参数时,PyCharm能够给出相应的类型提示(快捷键Ctrl + p弹出提示),提示传入两个参数,类型是int。
在这里插入图片描述
这是因为内置模块和其函数通常在Python的标准库中经过良好的文档化和类型注解,PyCharm能够根据这些预定义的信息来推断参数的类型和返回值的类型。

而对于我们自定义的函数func,仅能提示传入一个参数data,而类型未知。
在这里插入图片描述
这是因为PyCharm无法通过代码分析确定自定义函数的参数类型。

使用类型注解可以明确指定参数的类型,从而提升代码的可读性,并增强PyCharm的自动提示能力。Python在3.5版本时引入了类型注解,以便于静态类型检查工具、IDE等第三方工具的使用。

定义:
类型注解指在代码中涉及数据交互的地方提供数据类型的注解(显式的说明)。

主要功能:

  • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,从而提供更准确的代码提示
  • 帮助开发者自身对变量进行类型注释,以提高代码的可维护性和理解性

支持内容:

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

基本语法:

语法①:变量:类型

# 基础数据类型注解
var_1:int=10
var_2:str="apple"
var_3:bool=True

# 类对象类型注解
class Student:
    pass
stu:Student=Student()

# 基础容器类型注解
my_list=[1,2,3]
my_tuple:tuple=(1,2,3)
my_dict:dict={"年龄":18}

【注意】

  • 元组类型设置类型详细注解,需要为每一个元素都单独标注类型
  • 字典类型设置类型详细注解,需要指定两个类型:一个是键的类型,另一个是值的类型
  • 在无法直接判断变量类型时,才需为其添加类型注解
# 容器类详细注解
my_list:list[int]=[1,2,3]
my_tuple:tuple[int,str,bool]=(1,"apple",True)
my_dict:dict[str,int]={"年龄":18}

语法②:# type: 类型
在注释中进行类型注解。

# 在注释中进行类型注解
var_1=random   # type:int
var_2=json.load('{"name":"小明"}')   #type:dict[str,str]

def func():
    return 10
var_3=func()   #type:int

【注意】
类型注解只是提示性的,并非决定性的,不会在运行时强制执行类型检查。数据类型和注解类型无法对应也不会导致错误。
例如:

my_list:list[str]=[1,2,3]

运行结果:
在这里插入图片描述

二、函数的类型注解

①形参注解
如下图示,在编写函数(方法),使用形参data的时候,PyCharm工具没有提供任何提示;在调用函数(方法),传入参数的时候,PyCharm工具仅能提示传入一个参数data,而类型未知。
在这里插入图片描述
这是因为我们在定义函数(方法)时,没有给形参进行注解。

基本语法:
def 函数方法名(形参1 : 类型 , …… , 形参N : 类型 ,) :
  函数体

在这里插入图片描述

②返回值注解
除此之外,函数(方法)的返回值也可以添加类型注解。

基本语法:
def 函数方法名(形参1 : 类型 , …… , 形参N : 类型 ,) -> 返回值类型 :
  函数体

在这里插入图片描述
【注意】
类型注解只是提示性的,并非决定性的,不会在运行时强制执行类型检查。数据类型和注解类型无法对应也不会导致错误。
例如:

# 对返回值进行类型注解
def func(data:list)->list:
    return data
func(True)

运行结果:
在这里插入图片描述

三、Union类型注解

①定义
在 Python 中,Union 类型注解表示一个变量可以是多种不同类型中的任意一种。

②作用
通常用于定义变量、参数或返回值的类型,提供了一种方式来表示参数或返回值的灵活性,让函数能够同时接受多种类型的输入。

③使用方式

  • 导包:from typing import Union
  • 使用:Union[类型, …, 类型]
# 导包:从 typing 模块中导入了 Union 类型
from typing import Union
# 定义包含不同类型元素的列表
# 类型注解 list[Union[str, int]] 表示这个列表可以包含 str 和 int 类型的元素
my_list:list[Union[str,int]]=[1,2,"666","apple"]

# 类型注解 Union[int, str] 表示 data 可以是 int 或 str 类型
# 函数的返回类型也使用了 Union[int, str],表示函数可以返回 int 或 str 类型的值
def func(data:Union[int,str])->Union[int,str]:
    pass

在这里插入图片描述

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

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

相关文章

GMMREG:基于高斯混合模型的鲁棒点集配准

其关键思想都是用连续密度函数表示离散点集,即高斯混合模型。不同点在于本节算法采用L2距离来衡量两个点云之间的相似性,而5.7节中的NDT算法采用的是作者定义的匹配势来衡量,实际上是所有线段对之间的差异。并且本节算法中加入了薄板样条插值…

打造分布式缓存组件【场景】

本文将采用AOP 反射 Redis自定义缓存标签,重构缓存代码,打造基础架构分布式缓存组件 配置 需要在Redis配置类中开启AOP自动代理,即通过EnableAspectJAutoProxy 注解实现该功能 import com.fasterxml.jackson.annotation.JsonAutoDetect; …

「链表」链表原地算法合集:原地翻转|原地删除|原地取中|原地查重 / LeetCode 206|237|2095|287(C++)

概述 对于一张单向链表,我们总是使用双指针实现一些算法逻辑,这旨在用常量级别空间复杂度和线性时间复杂度来解决一些问题。 所谓原地算法,是指不使用额外空间的算法。 现在,我们利用双指针实现以下四种行为。 //Definition fo…

Linux驱动.之I2C,iic驱动层(二)

一、 Linux下IIC驱动架构 本篇只分析,一个整体框架。 1、首先说说,单片机,的i2c硬件接口图,一个i2c接口,通过sda和scl总线,外接了多个设备device,通过单片机,来控制i2c的信号发生&…

VUE和Element Plus

1.VUE 1.下载和配置环境 使用vue编程,我们需要使用到的编程软件是vs code,还需要使用node.js,这个的作用就类似于JDK,当我们都下载好之后,winR键打开命令提示符,我们在这里可以查看版本, npm…

《计算机网络 - 自顶向下方法》阅读笔记

《计算机网络 - 自顶向下方法》阅读笔记 应用层、运输层、网络层、数据链路层 计算机网络和因特网: 因特网: ​ 是一个世界范围的计算机网络,互联了全世界的计算机设备 计算机设备:手机,电脑,游戏机&#…

MATLAB数据可视化:在地图上画京沪线的城市连线

matlab自带的geoplot(lat,lon) 可以在地理坐标中绘制线条。使用 lat和lon分别指定以度为单位的经度和纬度坐标。 绘制京沪线所经城市线条: citys [116.350009,39.853928; 116.683546,39.538304; 117.201509,39.085318; 116.838715,38.304676;...116.359244,37.436…

Java网络编程——HTTP协议原理

协议 我们在网上冲浪时,会在浏览器地址栏输入一个网址,然后就能打开网页了。比如,输入 https://www.douban.com/就可以访问到豆瓣的主页: 那么大家是否好奇:https 是什么意思,作用又是什么呢?…

语言模型简介和Ngram模型(1)

语言模型介绍一 语言模型语言模型概念语言模型应用-语音识别声纹特征提取语言模型挑选成句 语言模型应用-手写识别语言模型应用-输入法语言模型分类语言模型评价指标-困惑度PPL N-gram语言模型马尔科夫假设平滑问题平滑问题解决一平滑问题解决二 插值优化语言模型应用-文本纠错…

unity 创建项目报错feature has expired (H0041),sentinel key not found (H0007)

两个报错同一种处理方式。 1、删除以下路径所有文件:C:\ProgramData\SafeNet Sentinel(注意:ProgramData为隐藏文件) 2、打开Cmd(WinR键,输入cmd回车),进入Unity安装所在盘符&#…

SecureCRT记录会话日志

在使用SecureCRT软件的时候,有个非常实用的功能:记录会话日志,就是可以把当前会话的所有记录保存成文本文件。下面简单介绍一下如何使用这个功能。 首先点击SecureCRT软件左上角的文件 然后点击会话日志即可 然后选择一个路径保存日志&#…

物流仓库安全视频智能管理方案:构建全方位、高效能的防护体系

一、背景分析 随着物流行业的快速发展和仓储需求的日益增长,仓库安全成为企业运营中不可忽视的重要环节。传统的人工监控方式不仅效率低下,且难以做到全天候、无死角覆盖,给仓库资产和人员安全带来潜在风险。因此,引入仓库安全视…

Datawhale AI夏令营第四期 魔搭-AIGC方向 task01笔记

目录 赛题内容 可图Kolors-LoRA风格故事挑战赛 baseline要点讲解(请配合Datawhale速通教程食用) Step1 设置算例及比赛账号的报名和授权 Step2 进行赛事报名并创建PAI实例 Step3 执行baseline Step4 进行赛题提交 微调结果上传魔搭 lora 调参参数介绍及 SD 的基础知识点…

ST-LINK烧录MCU

打开ST-LINK软件: 主板断电状态下接入烧录器,烧录器USB连接电脑: 主板上电,点击连接按钮: 点击加载文件: 点击写入按钮,烧录成功后拔掉烧录器,主板重新上电

CPU 流水线技术初识

在当今数字化的时代,计算机已经成为我们生活中不可或缺的一部分。而在计算机的核心部位,中央处理器(CPU)则是其重要的组成部分。CPU 的性能决定了计算机的运行速度和处理能力,而流水线技术则是 CPU 性能提升的关键所在…

SCAU华南农业大学 高级程序语言设计(C语言)OJ实验题解

有错漏/建议/意见 欢迎在评论区提出!!! 实验1 C语言程序初步 堂前习题 6567 第一个C程序 描述: 将下列程序输入Visual C,编译、连接和运行该程序,运行通过后,提交程序。 输入: …

不同环境下RabbitMQ的安装-3 操作RabbitMQ

前面两篇从不同环境下RabbitMQ的安装-1 为什么要使用消息服务 到同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ介绍了关于如何在ARM架构、X86架构和Window系统下如何安装,各位小伙伴可以根据自己的实际开发场景参考安装。 到本篇是一些…

宿主机与容器(docker)之间的数据共享

目录 一台宿主机上的容器和宿主机之间的数据共享 创建卷 进入Docker的卷的存储位置 进入卷ep1的数据存储位置 创建容器并挂载至卷ep1上 测试: 进入容器内部查看 一台宿主机上的多个容器之间的数据共享 挂载新的docker容器在该卷上 查看修改的数据是否一致…

CocosCreator使用 ProtoBuf WebSocket与服务器对接方法

在 Cocos Creator 中使用 .proto 文件和转换成 TypeScript(TS)两者各有其优缺点,具体选择取决于你的项目需求和团队的开发习惯。以下是两者的一些比较: 1、使用 .proto 文件的优点: 跨语言支持:Protocol B…

对目录的操作

1.fileno:获得文件流指针里的文件描述符 int fd fileno(FILE *fp) 成功返回文件描述符 失败返回-1 2.fdopen:与fileno相反,将文件描述符转换为文件流指针 FILE *fp fdopen(int fd) 成功返回文件流指针 失败返回-1 一、目录&#x…