python 编码中为什么要写类型注解?

发布时间:2026/11/4 18:46:17

python 编码中为什么要写类型注解? 1、背景我们先谈谈为什么在编码过程中强烈推荐使用类型注解 这对于刚开始学习的人来讲是特别容易上手的, 其间的道理在于把计算机底层原理全方位地进行封装, 以及动态语言所具备的特性促成使用时特别舒适。然而这种所谓的“舒适”得有相应代价, 我们或许听说过一句描述动态语言的话语,即动态在某时会让人觉得畅快。紧接着就始终处于这般动态的情况之下, 持续保持畅快。那为何会这样讲呢? 动态确实能够给予我们于编码之际更多的灵活性以及能力, 然而动态所带来的却是更多的不确定性以及混乱, 致使后来的维护者乃至作者自身都会生出极大的维护压力能够想象一个历经数年迭代的复杂系统, 要是大多都运用动态的方式去编写代码的模样, 正所谓能力越大责任越大, 需加以克制。在维护以及开发期间, 类型注解能够很好地协助我们, 将变量的类型厘清, 从而降低不确定性以及混乱程度, 进而能够从容地去使用变量。在这儿讲了这么多没用的话, 主要目的在于, 能够使得读者深切地认识到, 动态所导致的正向以及反向带来的那种“爽”。往后就要进入主题了。2、使用方式2.1、 内置的类型注解大家可能都接触过内置注解, 不过总觉得它特别麻烦, 致使后面很轻易地就放弃去写注解, 其中缘由是得到的并非正面反馈, 请看下面这个示例:字符串类型的a被赋予结果为aa的值, 整数类型的b被赋予结果为1的值, 参数和返回标注了类型, 使得接下来调用时能够进行提示, 定义了一个有特定要求的函数, 其要求这个函数的唯一参数a是字符串类型且返回应为字符串类型时其函数体为用a格式化后的Hello {a}, 执行输出语句打印了用括号括起来的world时出现了错误, 这里进行补充说明, 一些简单的标注看起来好像起不到成效, 然而要是换成有含义的名字又会如何呢, 定义了User这个名称, 它被赋予一个函数, 该函数的参数规范为User类型的u且没有返回值, 其函数体是用u格式化后的Hello {u}, 执行输出语句打印了用括号括起来的空字符串时出现了错误。方才简略地展示了, 内置的那种类型注解究竟是怎样予以运用的, 然而实际上这般简单情况下的类型注解, 根本没办法助力我们优质地给变量施行标注接下来要讲述的是一个模块。2.2、 模块的快速入门类型注解的主角是模块, 函数和变量类型注解在运行时并不会被强制执行, 不过这些注解能够被使用在, 例如类型检查器、IDE以及静态检查器等第三方工具上, 在我们编码的时候, 这些第三方工具会进行提示以及纠错。下面提供一些日常使用到的方法与用例给大家参考# 自定义类型注解User等于等于int, # 定义有多种类型注解的类型为.(, str, bytes), a_str等于a且等效于ba, # 通用类型, 接收通用的类型, 要尽量少地去使用def函数参数为(a:.Any)来打印输出a 模块是允许使用下标来辅助标记类型的, # 像列表这个变量而言, 下标便作为存储列表的属性, def函数参数为(:.List), 最后的可返回值为由相关类型限定为.List, # 字典类型的话, 下标里面第一个当成是key, 第二个为(:.Dict)。User, Age括号右箭头点字典冒号通过哈希符号, 元祖, 下标为元祖的属性定义左括号冒号点元组等于无右箭头点元组冒号通过哈希符号, 联合, 在一些场景下我们某些参数或返回值是不确定的, 至少给定一个参数类型定义左括号a逗号b冒号点联合右箭头点联合冒号通过哈希符号, 逗号与联合有点类似, 但默认多带一个None, 至少给定一个参数类型, 如冒号等价于联合。str, None定义一个函数, 它接受一个字符串类型的参数, 但其返回值类型是一个未明确指定的类型, 代码表示为空语句。当返回值有多个的时候, 如果需要返回字符串类型、整数类型、布尔类型, 其函数定义的形式是, 括号内为空, 返回值类型为一个未明确具体内容的元组类型。str, int, bool, float通过#类, 类自身同样是一种那类型class: 向上: 字符串等于“向上”向下: 字符串等于“向下”#明确有着需求一个对象的那些参数def : -: 通过#如此在一些枚举参数面临的场景之下, 我们也能够运用类当作我们枚举参数的那种归类def : -: 通过#要是上面所提及的枚举参数你觉着并并未特别好地达成, 那么依旧能够采用自定义类型注解的办法去达成 结构向上: “向上”向下: “向下”#在.9里对于枚举参数类型有着更好的支撑模式 类型。r, rb, w, wb以某种方式确定这一情况, 即定义一个函数, 它接收参数为一个字符串类型的文件路径, 还有一个处于特定模式类型的参数, 之后该函数返回一个也是字符串类型的结果 , 具体来说在使用时输入为(/some/path, r) , 这种情况下是正常的 , 而要是输入(/other/path, typo) , 就会提示该模式类型不合法 , 这里所说的类型 , 是在一些存在多态类的场景下 , 用于标注同一个类型的不同的形态 , 比如定义一个用户类User , 之后进行一些相关的类的定义 , 这里存在多个类 , 它们都与User相关 , 这相当于某种联合类型。User, , ,def (: .Type) - User: ()上述十几个用例场景大体而言能够覆盖多数日常编码情形, 要是存在一些别的需求, 那么可以参考官方的文档, 其上有着明确的说明。Docs: /zh-cn/3/lib…3、写在最后期望文章可以对众人对于类型注解的知晓以及运用产生助益, 尽早告别处于被那种复杂状态缠绕得心里忍不住想要发火却又理不清头绪的日子。
延伸阅读

更多相关文章

2026/10/30 9:45:28

Python编程语言的注释方式有哪些?老男孩python培训

编程语言里, 总能发现注释这一功能, 它极为有用, 还特别重要, 更是不可或缺的。编写程序之际, 写程序的人会针对语句、程序段、函数等作出解释或者给予提示, 这便是注释, 这么做的目的在于, 使人们能更轻松地去了解代码。那么, 编程语言的注释方式都有啥呢? 下面是详细的内容介…

2026/10/30 12:32:40

【ASPICE】SWE.4 软件单元验证

文章目录前言一、引言二、单元验证过程的目的三、单元验证过程的成果四、单元验证过程的实践五、输入输出六、参考资料前言 Automotive‑SPICE 是嵌入式汽车系统过程评估模型 (PAM) 过程参考模型 (PRM),通过该模型把控追溯整个开发流程。 本文介绍软件单元过程域的…

2026/11/4 10:28:29

Single Cell Expression Atlas(SCEA): 从网页点到代码拉数据

这个基因在哪个器官里表达高?bulk RNA-seq,54个组织位点Human Cell Atlas人体所有细胞类型的完整目录多中心联盟项目,数据分散在各门户SCEA这个基因在某个研究的哪些细胞类型里是?统一重处理的scRNA-seq实验集进行一下类比, &…

2026/11/5 0:02:07

8G显存本地AI数字人实战:从ASR到TTS的完整搭建与调优指南

8G显存在AI本地化圈子里处境挺尴尬的:你说它能跑模型吧,7B量化之后勉强能聊;你说它跑不好吧,又确实比集显强太多。大多数教程讲的都是怎么用Ollama跑一个聊天模型,但很少有人说可以更进一步——把它变成一只能听懂人话…

2026/11/5 0:02:07

大模型系统性入门:从原理、部署到微调应用的完整路线

1. 为什么你收藏了300个教程,依然觉得大模型没入门我先讲一个前几天在交流群里看到的真实场景:有人问"大模型怎么入门",群里立马有人甩出几个网盘链接,里面躺着几百个PDF和视频,说是"全网最全的大模型学…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/4 23:57:06

豆包三大更新实测:Skill体系、PPT与Excel打通、飞书衔接

1. 这次更新到底动了谁的蛋糕豆包这次放出来的三个更新,我第一时间就上手试了。说实话,刚看到更新日志的时候我没太当回事——毕竟现在各家AI助手三天两头都在推新功能,大部分都是换汤不换药。但真正跑完一轮完整的工作流之后,我改…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑