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,一经查实,立即删除!

相关文章

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患…

Redis实战篇笔记(最终篇)

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

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

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

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

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

2023/12/4JAVAmysql

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

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

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

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

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

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

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

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

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

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…

GitHub项目推荐-Deoldify

有小伙伴推荐了一个老照片上色的GitHub项目&#xff0c;看了简介&#xff0c;还不错&#xff0c;推荐给大家。 项目地址 GitHub - SpenserCai/sd-webui-deoldify: DeOldify for Stable Diffusion WebUI&#xff1a;This is an extension for StableDiffusions AUTOMATIC1111 w…

多多情报通:助力拼多多商家选品运营的数据分析工具

多多情报通&#xff08;原名多多参谋&#xff09;是一款专为拼多多商家设计的数据分析工具&#xff0c;旨在帮助商家进行选品、运营优化和提高销售业绩。通过多多情报通&#xff0c;商家可以更好地了解市场趋势、消费者需求和竞争对手状况&#xff0c;从而制定有效的运营策略。…

RH850P1X芯片学习笔记-Pin Functions

文章目录 Pin Connection Diagrams术语定义 Pin ListPort OverviewIntroductionFunctional OverviewPort CategoryOperation Mode运行模式 Port Function寄存器地址映射 Port寄存器描述Pn/JP0 — Port RegisterPPRn/JPPR0 — Port Pin Read RegisterPMn/JPM0 — Port Mode Regi…

VSCode 开发C/C++实用插件分享——koroFileHeader

相关文章 VSCode 开发C/C实用插件分享——codegeex VSCode 开发C/C实用插件分享——koroFileHeader 一、koroFileHeader二、使用步骤1.安装2.头文件注释配置3.函数注释配置 一、koroFileHeader 在有些场景下&#xff0c;我们需要在文件头添加一些作者、文件描述、时间和版权描述…

Redis主从复制实现RCE

文章目录 前置知识概念redis常用命令redis module 利用条件利用工具思路例题 [网鼎杯 2020 玄武组]SSRFMe方法一方法二 总结 前置知识 概念 背景是多台服务器要保存同一份数据&#xff0c;如何实现其一致性呢&#xff1f;数据的读写操作是否每台服务器都可以处理&#xff1f;这…

线性规划问题

线性规划问题&#xff1a; 将约束条件及目标函数都是决策变量的线性函数的规划问题称为线性规划问题 一般线性规划问题的描述&#xff1a; 为了解决这类问题&#xff0c;首先需要确定问题的决策变量:然后确定问题的目标&#xff0c;并将目标表示为决策变量的线性函数;最后找出问…

python之ddddocr快速识别

1. 安装模块 pip install ddddocr -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com2. 编写代码 import ddddocr # 导入orc模块 import logging # 导入日志 logging.getLogger().setLevel(logging.INFO) # 设置日志级别 def ComputeCode(path):try:logg…

Trello软件:从功能、使用技巧到替代软件等,一文弄懂项目管理必备工具!

Trello是什么&#xff1f; Trello是一款基于Web的可视化项目管理工具&#xff0c;它旨在提供一种灵活、易于理解和使用的任务管理系统。Trello将复杂的项目管理流程简化为直观的卡片和列表&#xff0c;使团队成员能轻松看到整个项目的状态&#xff0c;并了解自己的责任和任务。…