当前位置: 首页 > news >正文

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 的强大功能!

相关文章:

Python Typing: 实战应用指南

文章目录 1. 什么是 Python Typing?2. 实战案例:构建一个用户管理系统2.1 项目描述2.2 代码实现 3. 类型检查工具:MyPy4. 常见的 typing 用法5. 总结 在 Python 中,静态类型检查越来越受到开发者的重视。typing 模块提供了一种方式…...

OpenEuler学习笔记(六):OpenEuler与其他Linux服务器的区别是什么?

OpenEuler是一款基于Linux内核的开源服务器操作系统,与其他Linux服务器操作系统(如CentOS、Ubuntu Server等)存在多方面的区别,主要体现在以下几个方面: 一、社区与支持 OpenEuler:由华为发起并开源&…...

如何使用CRM数据分析和洞察来支持业务决策和市场营销?

如何使用CRM数据分析和洞察来支持业务决策和市场营销? 大家好!今天咱们聊聊一个特别重要的话题——如何利用客户关系管理(CRM)系统中的数据进行分析与洞察能够帮助我们做出更好的业务决策以及提升市场营销效果。其实啊&#xff0…...

MyBatis和JPA区别详解

文章目录 MyBatis和JPA区别详解一、引言二、设计理念与使用方式1、MyBatis:半自动化的ORM框架1.1、代码示例 2、JPA:全自动的ORM框架2.1、代码示例 三、性能优化与适用场景1、MyBatis:灵活的SQL控制1.1、适用场景 2、JPA:开发效率…...

SVN客户端使用手册

目录 一、简介 二、SVN的安装与卸载 1. 安装(公司内部一般会提供安装包和汉化包,直接到公司内部网盘下载即可,如果找不到可以看下面的教程) 2. 查看SVN版本 ​编辑 3. SVN卸载 三、SVN的基本操作 1. 检出 2. 清除认证数据 3. 提交…...

VsCode安装文档

一、下载 进入VS Code官网:Visual Studio Code - Code Editing. Redefined,点击 DownLoad for Windows下载windows版本 当然也可以点击旁边的箭头,下载Windows版本 或 Mac OS 版本 备注: Stable:稳定版Insiders&#…...

豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 豆包MarsCode 蛇年编程大作战 | 🐍 蛇年运势预测 在线体验地址:蛇年…...

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 🏠 第N个泰波那契数模型 📌 题目解析 第N个泰波那契数 题目要求的是泰波那契数,并非斐波那契数。 &…...

生信软件管家——conda vs pip

pip vs conda: 安装过python包的人自然两种管理软件都用过, Pip install和Conda install在Python环境中用于安装第三方库和软件包,但它们在多个方面存在显著的区别 总的来说: pip是包管理软件,conda既是包管理软件&…...

代码随想录——串

文章目录 反转字符串反转字符串Ⅱ路径加密反转字符串中的单词动态口令字符串匹配重复的子字符串 反转字符串 344. 反转字符串 //前后对应交换 //0<->sSize-1 //1<->sSize-2 //... //i<->sSize-1-i,i0,1,...,(sSize-1)/2 void reverseString(char* s, int s…...

詳細講一下RN(React Native)中的列表組件FlatList和SectionList

1. FlatList 基礎使用 import React from react; import { View, Text, FlatList, StyleSheet } from react-native;export const SimpleListDemo: React.FC () > {// 1. 準備數據const data [{ id: 1, title: 項目 1 },{ id: 2, title: 項目 2 },{ id: 3, title: 項目 3…...

TDengine 与上海电气工业互联网平台完成兼容性认证

在工业数字化转型和智能化升级的浪潮中&#xff0c;企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下&#xff0c;如何实现海量设备和时序数据的高效管理&#xff0c;已经成为推动行业升级的关键。…...

随机矩阵投影长度保持引理及其证明

原论文中的引理 2 \textbf{2} 2 1. \textbf{1. } 1. 引理 1 \textbf{1} 1(前提之一) 1.1. \textbf{1.1. } 1.1. 引理 1 \textbf{1} 1的内容 &#x1f449;前提&#xff1a; X ∼ N ( 0 , σ ) X\sim{}N(0,\sigma) X∼N(0,σ)即 f ( x ) 1 2 π σ e – x 2 2 σ 2 f(x)\text{}…...

深度学习利用数据加载、预处理和增强数据提高模型的性能

深度学习数据预处理是一个关键步骤&#xff0c;旨在提高模型的性能和准确性。 通过数据加载、预处理和增强&#xff0c;可以显著提高深度学习模型的性能和准确性。在实际应用中&#xff0c;需要根据具体的数据和任务来选择合适的预处理和增强技术。 以下将详细论述并举例说明如…...

ESP32服务器和PC客户端的Wi-Fi通信

ESP32客户端-服务器Wi-Fi通信 本指南将向您展示如何设置ESP32板作为服务端&#xff0c;PC作为客户端&#xff0c;通过HTTP通信&#xff0c;以通过Wi-Fi&#xff08;无需路由器或互联网连接&#xff09;交换数据。简而言之&#xff0c;您将学习如何使用HTTP请求将一个板的数据发…...

新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战

生成式人工智能的发展既带来了有益的生产力转型机会&#xff0c;也提供了被恶意利用的机会。 最近&#xff0c;Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT&#xff0c;是人工智能用于非法活动的新前沿&#xff0c;可以被用于网…...

Spring MVC (三) —— 实战演练

项目设计 我们会将前端的代码放入 static 包下&#xff1a; 高内聚&#xff0c;低耦合 这是我们在实现项目的设计思想&#xff0c;一个项目里存在很多个模块&#xff0c;每一个模块内部的要求类与类、方法与方法要相互配合紧密联系&#xff0c;这就是高内聚&#xff0c;低耦合…...

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量&#xff0c;大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中&#xff0c;不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些&#xff1f;就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…...

【游戏设计原理】82 - 巴斯特原则

巴斯特原则的核心是“对你的玩家好一点”&#xff0c;这一点直击游戏设计的核心——玩家体验。 现代游戏设计不仅要注重挑战性&#xff0c;还要关注玩家的情绪波动与行为反应。当玩家因为过高的难度感到挫败甚至愤怒时&#xff0c;他们往往选择退出游戏&#xff0c;而不是迎接…...

DDD架构实战第六讲总结:领域驱动设计中的聚合

云架构师系列课程之DDD架构实战第六讲总结:领域驱动设计中的聚合 聚合提升了对象系统的粒度,保证了业务逻辑的完整性,减少了错误产生的概率 一、引言 本讲将探讨领域驱动设计(DDD)中的重要概念——聚合。聚合是业务完整性的单元,是一个更大力度的封装。在领域驱动设计中…...

整理‌ 主流国产AI龙虾的核心能力对比表(支持平台/部署方式/适用场景)腾讯WorkBuddy‌ ‌阿里JVS Claw 百度DuMate

根据当前的资料&#xff0c;腾讯WorkBuddy和百度的DuMate当前有一定一定量的免费额度&#xff0c;大家可以用起来&#xff01; 主流国产AI龙虾的核心能力对比表 五款主流国产AI龙虾的核心能力对比表已整理完成&#xff0c;涵盖支持平台、部署方式与适用场景三大维度&#xff…...

轻量锐驰 x 轻量对象存储:构建个人专属高速云存储方案

1. 为什么你需要自建云存储&#xff1f; 每次用公共网盘传文件都像在参加龟速比赛&#xff1f;分享给朋友时对方总抱怨下载慢如蜗牛&#xff1f;我三年前就开始研究自建云存储方案&#xff0c;实测下来轻量锐驰服务器轻量对象存储的组合&#xff0c;速度能跑满家庭宽带上限&…...

解锁JSON Viewer 3大效率黑科技:从数据解析到开发提效的全流程解决方案

解锁JSON Viewer 3大效率黑科技&#xff1a;从数据解析到开发提效的全流程解决方案 【免费下载链接】json-viewer It is a Chrome extension for printing JSON and JSONP. 项目地址: https://gitcode.com/gh_mirrors/js/json-viewer JSON Viewer是一款专为开发者打造的…...

3天掌握MediaPipe:从零开始构建实时AI应用的终极指南

3天掌握MediaPipe&#xff1a;从零开始构建实时AI应用的终极指南 【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe 想快速上手实时AI应用开发却不知…...

XPath与lxml解析库

test.xml<?xml version"1.0" encoding"utf-8"?><bookstore><book name"halibote"><title lang"en">Harry Potter</title><author>J K. Rowling</author><year>2005</year>&l…...

野火挑战者开发板实战:用STM32CubeMX从零配置GPIO、UART和ADC(附完整代码)

野火挑战者开发板实战&#xff1a;从零构建环境监测系统 刚拿到野火挑战者开发板时&#xff0c;面对密密麻麻的引脚和复杂的配置选项&#xff0c;很多初学者会感到无从下手。本文将带你用STM32CubeMX图形化工具&#xff0c;快速配置GPIO、UART和ADC这三个最常用的外设&#xff…...

汽车ECU FOTA升级必备:手把手教你用C语言解析S19/HEX文件(附完整代码)

汽车ECU FOTA升级实战&#xff1a;C语言高效解析S19/HEX文件的技术内幕 在汽车电子控制单元&#xff08;ECU&#xff09;的固件空中升级&#xff08;FOTA&#xff09;流程中&#xff0c;二进制文件的解析效率直接影响着升级过程的可靠性和实时性。当编译器生成的S19或HEX文件需…...

Qwen3-1.7B推理模式切换体验:思考模式与非思考模式效果对比

Qwen3-1.7B推理模式切换体验&#xff1a;思考模式与非思考模式效果对比 1. 引言&#xff1a;双模式推理的创新价值 在边缘计算和轻量化AI模型快速发展的今天&#xff0c;Qwen3-1.7B通过独特的动态双模式架构&#xff0c;为用户提供了灵活的推理选择。这款17亿参数的轻量级大语…...

Qwen3-14B私有化效果:支持国密算法加密的API通信安全方案

Qwen3-14B私有化效果&#xff1a;支持国密算法加密的API通信安全方案 1. 私有部署镜像概述 Qwen3-14B私有部署镜像是基于通义千问大语言模型优化定制的专业解决方案&#xff0c;特别针对RTX 4090D 24GB显存配置进行了深度适配。这个镜像不仅提供了完整的运行环境和模型依赖&a…...

忍者像素绘卷微信小程序开发:生成图水印添加与版权保护机制实现

忍者像素绘卷微信小程序开发&#xff1a;生成图水印添加与版权保护机制实现 1. 项目背景与需求分析 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站&#xff0c;它融合了忍者文化与16-Bit复古游戏美学&#xff0c;为用户提供独特的创作体验。随着用户生成内容…...