Python Typing: 实战应用指南

在这里插入图片描述

文章目录

    • 1. 什么是 Python Typing?
    • 2. 实战案例:构建一个用户管理系统
      • 2.1 项目描述
      • 2.2 代码实现
    • 3. 类型检查工具:MyPy
    • 4. 常见的 `typing` 用法
    • 5. 总结

在 Python 中,静态类型检查越来越受到开发者的重视。typing 模块提供了一种方式,让开发者在动态语言的灵活性与静态语言的类型安全之间找到平衡。本篇博客将带你通过一个实际案例,详细了解如何在项目中使用 Python 的类型注解与 typing 模块。


1. 什么是 Python Typing?

Python Typing 是一种用于显式指定变量、函数参数和返回值类型的机制。这不仅可以帮助开发者写出更易于理解和维护的代码,还能通过类型检查工具(如 MyPy)捕获潜在的错误。

示例:

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

在这个例子中,函数 add_numbers 接收一个整型列表,并返回一个整型值。


2. 实战案例:构建一个用户管理系统

2.1 项目描述

我们将实现一个简单的用户管理系统,包括以下功能:

  1. 创建用户
  2. 获取用户列表
  3. 更新用户信息
  4. 删除用户

2.2 代码实现

  1. 定义类型结构

我们首先定义用户的数据结构:

from typing import List, Dict, Unionclass User:def __init__(self, user_id: int, name: str, email: str):self.user_id = user_idself.name = nameself.email = emaildef __repr__(self) -> str:return f"User(id={self.user_id}, name='{self.name}', email='{self.email}')"
  1. 创建用户管理类

使用 typing 为方法参数和返回值指定类型。

class UserManager:def __init__(self):self.users: Dict[int, User] = {}def add_user(self, user_id: int, name: str, email: str) -> bool:if user_id in self.users:return Falseself.users[user_id] = User(user_id, name, email)return Truedef get_user(self, user_id: int) -> Union[User, None]:return self.users.get(user_id)def get_all_users(self) -> List[User]:return list(self.users.values())def update_user(self, user_id: int, name: str = None, email: str = None) -> bool:user = self.users.get(user_id)if not user:return Falseif name:user.name = nameif email:user.email = emailreturn Truedef delete_user(self, user_id: int) -> bool:if user_id in self.users:del self.users[user_id]return Truereturn False
  1. 测试代码

使用上述类,构建一个简单的交互式脚本:

def main():manager = UserManager()manager.add_user(1, "Alice", "alice@example.com")manager.add_user(2, "Bob", "bob@example.com")print("All users:", manager.get_all_users())print("Get user 1:", manager.get_user(1))manager.update_user(1, email="newalice@example.com")print("Updated user 1:", manager.get_user(1))manager.delete_user(2)print("All users after deletion:", manager.get_all_users())if __name__ == "__main__":main()

运行脚本输出:

All users: [User(id=1, name='Alice', email='alice@example.com'), User(id=2, name='Bob', email='bob@example.com')]
Get user 1: User(id=1, name='Alice', email='alice@example.com')
Updated user 1: User(id=1, name='Alice', email='newalice@example.com')
All users after deletion: [User(id=1, name='Alice', email='newalice@example.com')]

3. 类型检查工具:MyPy

为了确保类型注解的正确性,可以使用 MyPy 进行静态检查:

  1. 安装 MyPy:
    pip install mypy
    
  2. 运行类型检查:
    mypy your_script.py
    

MyPy 会检查你的代码是否符合类型注解的约束,比如传入参数的类型是否匹配。


4. 常见的 typing 用法

  1. 列表和字典
from typing import List, Dictnames: List[str] = ["Alice", "Bob"]
ages: Dict[str, int] = {"Alice": 25, "Bob": 30}
  1. 可选类型
from typing import Optionaldef greet(name: Optional[str] = None) -> str:if name:return f"Hello, {name}!"return "Hello, Stranger!"
  1. 联合类型
from typing import Uniondef add(x: Union[int, float], y: Union[int, float]) -> Union[int, float]:return x + y
  1. Callable(可调用对象)
from typing import Callabledef apply_function(func: Callable[[int, int], int], x: int, y: int) -> int:return func(x, y)result = apply_function(lambda a, b: a + b, 2, 3)
print(result)  # 输出: 5

5. 总结

通过类型注解和 typing 模块,你可以让代码更具可读性和安全性,同时通过静态检查工具(如 MyPy)减少运行时错误。在团队协作中,类型注解还能让新成员快速理解代码逻辑。希望本篇文章能帮助你在实际项目中充分利用 Python Typing 的强大功能!

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

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

相关文章

Linux的基本指令(上)

1.ls指令 语法:ls [选项] [目录或文件] 功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。 常用选项: -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。 -d 将…

【数据分享】1929-2024年全球站点的逐日平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标!说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站点…

算法每日双题精讲 —— 二分查找(山脉数组的峰顶索引,寻找峰值)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧💪 在算法的…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…

如何为64位LabVIEW配置正确的驱动程序

在安装 64位 LabVIEW 后,确保驱动程序正确配置是关键。如果您首先安装了 32位 LabVIEW 和相关驱动,然后安装了 64位 LabVIEW,需要确保为 64位 LabVIEW 安装和配置适当的驱动程序,才能正常访问硬件设备。以下是详细步骤&#xff1a…

《Memory Barriers a Hardware View for Software Hackers》阅读笔记

CPU 设计者引入内存屏障(memory barriers)是为了应对在多处理器系统(SMP)中,内存引用重排序可能导致的同步问题。尽管重排序可以提高性能,但在某些情况下(如同步原语),正…

ES设置证书和创建用户,kibana连接es

1、启动好es 2、进入es容器 docker exec -it es /bin/bash 3、生成ca证书 ./bin/elasticsearch-certutil ca 注:两个红方框位置直接回车 4、生成cert证书 ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 注:前两个红框直接回车&am…

【安当产品应用案例100集】034-安当KSP支持密评中存储数据的机密性和完整性

安当KSP是一套获得国密证书的专业的密钥管理系统。KSP的系统功能扩展图示如下: 我们知道商用密码应用安全性评估中,需要确保存储的数据不被篡改、删除或者破坏,必须采用合适的安全方案来确保存储数据的机密性和完整性。KSP能否满足这个需求呢…

STM32项目分享:智能厨房安全检测系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能厨房安全检测系统 (资料分…

Poetry shell --> poetry-plugin-shell

当前环境:Poetry (version 2.0.1) python Python 3.11.8 根据:https://python-poetry.org/docs/managing-environments/#bash-csh-zsh 在新版本的 poetry 执行 poetry shell 会报错 这个功能目前需要使用 poetry-plugin-shell 插件 关于 poetry-plugin-s…

第84期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

【JavaEE进阶】Spring留言板实现

目录 🎍预期结果 🍀前端代码 🎄约定前后端交互接口 🚩需求分析 🚩接口定义 🌳实现服务器端代码 🚩lombok介绍 🚩代码实现 🌴运行测试 🎄前端代码实…

基于SpringBoot格式化实体的时间类型以及静态注入依赖

一. 场景描述 在进行前后端交互时,发现实体的LocalDateTime返回的格式是这样的: 这不符合我们日常习惯的格式 “年-月-日 时:分:秒”,于是上网学习了前辈 励碼的文章SSM项目中LocalDateTime格式化最佳实践_localdatetime 格式化-CSDN博客解决…

计算机网络 (59)无线个人区域网WPAN

前言 无线个人区域网(WPAN,Wireless Personal Area Network)是一种以个人为中心,采用无线连接方式的个人局域网。 一、定义与特点 定义:WPAN是以个人为中心,实现活动半径小、业务类型丰富、面向特定群体的无…

TangoFlux 本地部署实用教程:开启无限音频创意脑洞

一、介绍 TangoFlux是通过流匹配和 Clap-Ranked 首选项优化,实现超快速、忠实的文本到音频生成的模型。 本模型由 Stability AI 提供支持🚀 TangoFlux 可以在单个 A40 GPU 上在 ~3 秒内生成长达 34.1kHz 的立体声音频。 二、部署 安装方式非常简单 1…

[cg] 使用snapgragon 对UE5.3抓帧

最近想要抓opengl 的api,renderdoc在起应用时会闪退(具体原因还不知道),试了下snapgraon, 还是可以的 官网需要注册登录后下载,官网路径:Developer | Qualcomm 为了方便贴上已经下载好的exe安装包&#x…

pycharm 运行远程环境问题 Error:Failed to prepare environment.

问题排查 拿到更详细的报错信息: Help > Diagnostic Tools > Debug Log Settings section: 添加下面的配置 com.intellij.execution.configurations.GeneralCommandLine 重显报错,我这里是再次运行代码打开 Help | Collect Logs and Diagnosti…

OS Copilot功能测评:智能助手的炫彩魔法

简介: OS Copilot 是一款融合了人工智能技术的智能助手,专为Linux系统设计,旨在提升系统管理和运维效率。本文详细介绍了在阿里云ECS实例上安装和体验OS Copilot的过程,重点评测了其三个核心参数:-t(模式…

C++ lambda表达式

目录 1.lambda表达式 1.1什么是Lambda表达式? 1.2Lambda表达式的语法 1.3捕捉列表 1.4函数对象与lambda表达式 1.lambda表达式 1.1什么是Lambda表达式? Lambda表达式是C11标准引入的一种匿名函数,它允许你在需要函数的地方直接编写代码…

环境变量配置与问题解决

目录 方法 配置了还是运行不了想要的东西 解决方案 为什么 解决方案 方法 方法一:此电脑右击-属性-相关链接-高级系统设置-环境变量(N)-系统变量里面找到Path-三个确定】 方法二:winr cmd 黑框输入sysdm.cpl,后面…