Python类型注解必备利器:typing模块解读指南

更多资料获取

📚 个人网站:ipengtao.com


在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。本文将深入探讨typing模块,介绍其基本概念、常用类型注解以及使用示例,以帮助读者更全面地了解和应用静态类型注解。

1. 简介

typing模块为Python带来了类型提示和类型检查的能力。它允许开发者在代码中添加类型注解,提高代码的可读性和可维护性。尽管Python是一种动态类型语言,但类型注解能让开发者更清晰地了解函数和变量的预期类型。

2. 基本类型注解

a. 类型别名

typing模块中有多种内置的类型别名,比如ListTupleDict等,可以用于注解变量和函数的预期类型。

from typing import Listdef process_numbers(numbers: List[int]) -> int:return sum(numbers)

b. Union 类型

Union允许参数接受多种不同类型的数据。

from typing import Uniondef double_or_square(number: Union[int, float]) -> Union[int, float]:if isinstance(number, int):return number * 2else:return number ** 2

c. Optional 类型

Optional表示参数可以是指定类型或者None

from typing import Optionaldef greet(name: Optional[str]) -> str:if name:return f"Hello, {name}!"else:return "Hello, World!"

3. 类型变量和泛型

a. 类型变量

TypeVar允许创建泛型函数或类。

from typing import TypeVar, ListT = TypeVar('T')def get_first_element(items: List[T]) -> T:return items[0]first_element = get_first_element([1, 2, 3])  # 推导类型为 int

b. 泛型函数

CallableSequence等泛型类型的使用。

from typing import Callable, Sequencedef apply_function(func: Callable[[int, int], int],numbers: Sequence[int]
) -> List[int]:return [func(num, num) for num in numbers]

4. 类型注解的应用

a. 函数参数和返回值的注解

def add(a: int, b: int) -> int:return a + b

b. 类型注解的类成员

class MyClass:value: intdef __init__(self, initial_value: int) -> None:self.value = initial_valuedef double_value(self) -> int:return self.value * 2

c. 生成器函数的注解

from typing import Generatordef generate_numbers(n: int) -> Generator[int, None, None]:for i in range(n):yield i

5. 高级类型注解

a. 递归类型注解

ListDict等类型的嵌套和组合。

from typing import List, Dict, UnionTree = List[Union[int, Dict[str, 'Tree']]]

b. 类型别名

自定义类型别名提高代码可读性。

UserId = int
Username = strdef get_user_details(user_id: UserId) -> Tuple[UserId, Username]:# some code

6. 类型检查工具

使用mypy等静态类型检查工具进行类型检查。

$ mypy your_program.py

7. 注意事项

  • 静态类型检查工具辅助,不会影响Python的动态特性,可以选择性地使用类型注解。
  • 类型注解应该让代码更易于理解,但不应使代码变得过于复杂。

总结

typing模块为Python添加了静态类型注解的能力,提高了代码的可读性和维护性。本文介绍了类型注解的基本概念、常见类型和高级类型,以及类型检查工具的使用。希望读者可以更好地应用类型注解,改善Python代码的质量。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

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

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

相关文章

详细学习Pyqt5的9种显示控件

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图(Item View) 快速弄懂Pyqt5的4种项目部件(Item Widget) 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

Web前端 ---- 【vue】vue 组件传值(props、全局事件总线、消息的订阅与发布)

目录 前言 父子组件 父传子 子传父 全局事件总线 什么叫全局事件总线 如何创建全局事件总线 如何在组件上获取到这个全局vc对象 最常用的创建全局事件总线 兄弟组件 消息订阅与发布 安装 使用 爷孙组件 前言 在上篇文章我们介绍了父子组件之间的传值通信&#xff…

写 SVG 动画必看!SVG系列文章3-动画标签

1、SMIL animation概览 SMIL不是指「水蜜梨」,而是Synchronized Multimedia Integration Language(同步多媒体集成语言)的首字母缩写简称,是有标准的。本文所要介绍的SVG动画就是基于这种语言。 SMIL允许你做下面这些事情&#…

单基因也可以这么做,经典生信文章思路,简单易复现更可升级

今天给同学们分享一篇生信文章“High Expression of PSRC1 Predicts Poor Prognosis in Lung Adenocarcinoma”,这篇文章发表在J Cancer期刊上,影响因子为3.9。 结果解读: LUAD和LUSC中PSRC1表达高 从TCGA数据集中,有535名LUAD患…

PTA 7-226 sdut-C语言实验-矩阵输出(数组移位)

输入N个整数&#xff0c;输出由这些整数组成的n行矩阵。 输入格式: 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示后面要输入的整数个数。 下面依次输入N个整数。 输出格式: 以输入的整数为基础&#xff0c;输出有规律的N行数据。 输入样例: 在…

Redis实战篇笔记(最终篇)

Redis实战篇笔记&#xff08;七&#xff09; 文章目录 Redis实战篇笔记&#xff08;七&#xff09;前言达人探店发布和查看探店笔记点赞点赞排行榜 好友关注关注和取关共同关注关注推送关注推荐的实现 总结 前言 本系列文章是Redis实战篇笔记的最后一篇&#xff0c;那么到这里…

集成开发环境PyCharm的使用【侯小啾python基础领航计划 系列(三)】

集成开发环境 PyCharm 的使用【侯小啾python基础领航计划 系列(三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

linux 下如何将/dev/nvme0n1符格式化为空盘符

linux 下如何将/dev/nvme0n1符格式化为空盘符 作者&#xff1a;DPDK开发栏目&#xff1a;公开2023-08-30 03:01254 在Linux下&#xff0c;你可以使用以下步骤将/dev/nvme0n1硬盘格式化为空盘符&#xff1a; 首先&#xff0c;确保你拥有适当的权限。以管理员或root用户身份登录…

【数据库设计和SQL基础语法】--SQL语言概述--数据类型和约束

一、 数据类型 1.1 整数类型 整数类型是一种数据类型&#xff0c;用于存储整数值。在数据库中&#xff0c;常见的整数类型包括&#xff1a; INT&#xff08;整数&#xff09;&#xff1a; 定义&#xff1a;用于存储标准整数&#xff0c;通常占用4个字节。范围&#xff1a;-2,…

DFA实现敏感词审查

1.1)需求分析 内容核心有以下内容&#xff1a; 文章审核不能过滤一些敏感词&#xff1a;私人侦探、针孔摄象、信用卡提现、广告代理、代开发票、刻章办、出售答案、小额贷款… 需要完成的功能&#xff1a; 需要自己维护一套敏感词&#xff0c;在文章审核的时候&#xff0c;…

从零开始实现神经网络(二)_CNN卷积神经网络

参考文章: 介绍卷积神经网络1 介绍卷积神经网络2 在过去的几年里&#xff0c;关于卷积神经网络&#xff08;CNN&#xff09;的讨论很多&#xff0c;特别是因为它们彻底改变了计算机视觉领域。在这篇文章中&#xff0c;我们将建立在神经网络的基本背景知识的基础上&#xff0c;探…

基于Python的电影数据可视化分析系统的设计与实现

点我完整下载&#xff1a;基于Python的电影数据可视化分析系统的设计与实现.docx 基于Python的电影数据可视化分析系统的设计与实现 Design and Implementation of a Python-based Movie Data Visualization and Analysis System 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.…

2023/12/4JAVAmysql

流程控制函数 部门不存在,这个不存在交集,所有没出现

【Docker实操】创建一个Node服务

一、安装node 请查看阿里云官网教程&#xff1a;如何快速部署Node.js项目。&#xff08;注意要在根目录操作&#xff09;apt install nodejs、apt install npm执行上面两个命名来安装 安装完成后&#xff0c;执行node -v、npm -v&#xff0c;如果出现版本&#xff0c;就是安装…

你好!斐波那契查找【JAVA】

1.有幸遇见 斐波那契查找算法&#xff0c;也称黄金分割查找算法&#xff0c;是一种基于斐波那契数列的查找算法。与二分查找类似&#xff0c;斐波那契查找也是一种有序查找算法&#xff0c;但它的查找点不是中间位置&#xff0c;而是根据斐波那契数列来确定&#xff0c;因此又称…

工程师业余生活之制作蔬菜盆景

工程师业余生活陶冶情操之制作蔬菜盆景 &#xff08;蔬 果 盆 景 裝 點 家 居&#xff09; 市場上好多蔬菜瓜果,稍用一些心思,將一些價廉的蔬果製成別致的盆景, 便能使家居充滿自然氣息&#xff0c;增添生活情趣。以下介紹幾種製作方法&#xff1a; 【番薯盆景】 (番薯又名地…

4K-Resolution Photo Exposure Correction at 125 FPS with ~8K Parameters

MSLTNet开源 | 4K分辨率125FPS8K的参数量&#xff0c;怎养才可以拒绝这样的模型呢&#xff1f; 错误的曝光照片的校正已经被广泛使用深度卷积神经网络或Transformer进行广泛修正。尽管这些方法具有令人鼓舞的表现&#xff0c;但它们通常在高分辨率照片上具有大量的参数数量和沉…

Linux 服务器内开放指定的端口

场景&#xff1a; 公司新项目刚买了一台云服务器&#xff0c;部署了一个 springboot 项目在 8083 端口上。但是这时在浏览器访问 项目的 swagger 文档却访问不到&#xff1b; 首先想到是去云服务器平台去 配置安全组&#xff0c;将 8083 端口放开。配好之后再次访问发现还是访问…

鸿蒙(HarmonyOS)应用开发——viedo组件

video 组件 使用video组件 播放视频 Video(value: {src?: string | Resource, currentProgressRate?: number | string |PlaybackSpeed, previewUri?: string |PixelMap | Resource, controller?: VideoController})属性说明src视频播放源的路径currentProgressRate表示视…

avue页面布局 api 引用

展示 index.vue <template><basic-container><avue-crud :option"option":table-loading"loading":data"data":page"page":permission"permissionList":search.sync"search":before-closebefore…