annotated-types 完全指南:3步为 typing.Annotated 添加类型约束,告别无效数据
annotated-types 完全指南3步为 typing.Annotated 添加类型约束告别无效数据【免费下载链接】annotated-typesReusable constraint types to use with typing.Annotated项目地址: https://gitcode.com/gh_mirrors/an/annotated-typesPython 项目里age -5这样的无效数据还能畅通无阻annotated-types是一个专为typing.AnnotatedPEP 593声明类型约束的轻量 Python 库。3 步即可给数据加上清晰的边界年龄必须大于 18、列表长度不超过 10、字符串必须是纯数字。本篇完整指南从安装到全部常用约束类型一次讲清新手也能快速上手。为什么需要类型约束普通的类型标注x: int只能告诉工具这是个整数却无法表达是多大范围的整数。想声明年龄必须大于 18以前要么自己手写运行时断言要么依赖各验证框架的私有语法。annotated-types提供的是一组现成的约束元数据类型Gt、Ge、Lt、Le、Len、Predicate 等与typing.Annotated搭配使用可被 Pydantic 等下游库统一理解。两个值得先了解的设计点极度轻量库本身不做运行时校验只负责声明约束几乎没有性能开销生态标准由 Pydantic 与 Hypothesis 维护者在 PyCon 2022 冲刺周共同设计目标是成为整个 Python 生态的通用约束语言3步快速上手第1步一键安装 annotated-types要求 Python 3.10 及以上直接用 pip 安装pip install annotated-types如果想阅读源码可以克隆仓库git clone https://gitcode.com/gh_mirrors/an/annotated-types所有核心约束类型都实现在annotated_types/__init__.py这一个文件里打开扫一遍就能对整体有个印象。第2步添加数值与长度约束导入需要的约束类写在Annotated的类型之后即可from typing import Annotated from annotated_types import Gt, Len class User: age: Annotated[int, Gt(18)] # 必须大于 18 scores: Annotated[list[int], Len(0, 10)] # 列表长度为 0~10Gt(18)表示大于 18Len(0, 10)表示长度介于 0 到 10含两端。同类的还有Ge≥、Lt、Le≤也可以用Interval一次性给出上下界。第3步用 Predicate 写自定义校验对于上下界表达不了的约束比如质数或纯数字字符串Predicate可以把任意函数包装成约束——函数返回值真值时数据才合法from annotated_types import Predicate factors: list[Annotated[int, Predicate(is_prime)]] # 每个元素都必须是质数库内还内置了IsDigit纯数字、IsFinite有限浮点数等现成的泛型别名可以直接写x: IsFinite[float]无需自己再包一层Predicate。常用约束类型速查表约束类型含义典型用法Gt(x)/Ge(x)大于 / 大于等于 xAnnotated[int, Gt(18)]Lt(x)/Le(x)小于 / 小于等于 xAnnotated[int, Le(100)]Interval一次性指定上下界可组合上面四种Interval(ge1, le10)MultipleOf(x)必须是 x 的倍数Annotated[int, MultipleOf(4)]MinLen/MaxLen/Len最小/最大长度均含端点Annotated[str, Len(2, 8)]Timezone限定允许的时区Annotated[datetime, Timezone(None)]Unit声明数值的物理单位Annotated[float, Unit(m/s)]Predicate(func)func(value) 为真即通过Predicate(is_prime)Not谓词的取反仍可被内省识别Not(math.isfinite)doc(...)为参数附加文档说明Annotated[int, doc(用户ID)] 小细节约束可以和可比类型自由搭配例如Annotated[int, Gt(1.5)]表示大于 1.5 的整数边界值不要求和被标注类型同类型。常见问题 FAQQ1annotated-types 会自动校验数据吗不会。它只携带约束描述真正的校验由 Pydantic 等下游库读取元数据后执行——这正是它几乎零性能开销的原因。如何解析约束元数据可以参考tests/test_main.py中的官方示例。Q2同一个字段能叠加多个约束吗可以。在Annotated中依次列出即可例如Annotated[int, Ge(0), Le(100)]。对库作者而言GroupedMetadata提供了把多条约束打包成一个对象的机制Interval和Len本身就是分组元数据相关测试见tests/test_grouped_metadata.py。Q3想要更多约束怎么办项目刻意保持最小化只覆盖最常见的场景。官方建议如果你有额外需求在下游库中自定义并文档化自己的约束类型即可。设计思路详见README.md项目构建配置见pyproject.toml。写在最后annotated-types把数据边界从口头约定变成了声明式标注三步走完全程✅pip install annotated-types一键安装✅ 用Gt/Ge/Lt/Le/Len添加常用数值与长度约束✅ 用Predicate表达任意自定义校验掌握这个轻量库后你的类型标注就不再是标签而会成为真正的数据契约。搭配 Pydantic 等验证框架从此对无效数据说再见【免费下载链接】annotated-typesReusable constraint types to use with typing.Annotated项目地址: https://gitcode.com/gh_mirrors/an/annotated-types创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

TradingView Charting Library 多框架接入实战:十几个可跑通的行情图表示例

TradingView Charting Library 多框架接入实战:十几个可跑通的行情图表示例

TradingView Charting Library 多框架接入实战:十几个可跑通的行情图表示例 【免费下载链接】charting-library-examples Examples of Charting Library integrations with other libraries, frameworks and data transports 项目地址: https://gitcode.com/gh_mi…

2026/8/23 16:45:17 阅读更多 →
3行代码用上FcaNet预训练模型:torch.hub快速体验ImageNet 80% Top-1的频率通道注意力网络

3行代码用上FcaNet预训练模型:torch.hub快速体验ImageNet 80% Top-1的频率通道注意力网络

3行代码用上FcaNet预训练模型:torch.hub快速体验ImageNet 80% Top-1的频率通道注意力网络 【免费下载链接】FcaNet FcaNet: Frequency Channel Attention Networks 项目地址: https://gitcode.com/gh_mirrors/fc/FcaNet FcaNet(Frequency Channel…

2026/8/22 15:07:15 阅读更多 →
为什么 :atom 不能通过 Enumerable.t() 类型检查?Hammox 契约测试 Protocol 判定机制揭秘

为什么 :atom 不能通过 Enumerable.t() 类型检查?Hammox 契约测试 Protocol 判定机制揭秘

为什么 :atom 不能通过 Enumerable.t() 类型检查?Hammox 契约测试 Protocol 判定机制揭秘 【免费下载链接】hammox 🏝 automated contract testing via type checking for Elixir functions and mocks 项目地址: https://gitcode.com/gh_mirrors/ha/ha…

2026/8/22 15:07:15 阅读更多 →

最新新闻

开源模型实战指南:从DataCamp学习到生产环境部署的决策框架

开源模型实战指南:从DataCamp学习到生产环境部署的决策框架

1. 这篇文章真正要解决的问题当“开源模型”和“实战”成为技术社区的热门标签,一个核心的决策困境也随之浮现:面对琳琅满目的开源模型和层出不穷的实战教程,我们究竟该如何选择?是追逐最新的前沿模型,还是深耕一个成熟…

2026/8/24 6:00:04 阅读更多 →
Linux下Python后台持久化:nohup与screen原理及实战

Linux下Python后台持久化:nohup与screen原理及实战

1. 项目概述:让Python程序真正“离线干活”,不是靠重启或手动守着终端你写好了一个Python脚本——可能是爬虫定时抓取数据、训练模型跑通一个epoch、监听某个API接口做自动响应,或者只是个持续写日志的后台服务。本地电脑一关机,程…

2026/8/24 6:00:04 阅读更多 →
规模化招聘的五大挑战与智能解决方案

规模化招聘的五大挑战与智能解决方案

1. 招聘规模化的本质与困境当企业年招聘需求突破500人门槛时,传统招聘模式就会像老旧的单车道遇上春运车流一样捉襟见肘。去年服务某跨境电商客户时,他们需要在3个月内完成800人的技术团队扩建,HR部门最初沿用"熟人推荐猎头合作"的…

2026/8/24 6:00:04 阅读更多 →
数据库与软件工程笔试核心考点与备考策略

数据库与软件工程笔试核心考点与备考策略

1. 数据库与软件工程笔试备考指南作为计算机专业研究生入学考试的核心科目,数据库和软件工程一直是笔试中的重点难点。这套训练题集针对日本大学院入学考试的第九套模拟试题,涵盖了关系数据库设计、SQL查询优化、软件生命周期管理等多个关键知识点。我在…

2026/8/24 6:00:04 阅读更多 →
专科生AI求职攻略:9款工具提升面试通过率

专科生AI求职攻略:9款工具提升面试通过率

1. 专科生如何应对AI时代的就业挑战2026年的就业市场正在经历一场由AI技术引发的深刻变革。作为一名长期关注职业教育的技术博主,我注意到专科生在求职过程中面临的新挑战:企业越来越倾向于使用AI工具进行简历筛选和初步面试。这种趋势导致传统求职方式的…

2026/8/24 6:00:04 阅读更多 →
一条命令把网站装进桌面应用:Pake 上手指南

一条命令把网站装进桌面应用:Pake 上手指南

一条命令把网站装进桌面应用:Pake 上手指南 【免费下载链接】Pake 🤱🏻 Turn any webpage into a desktop app with one command. 项目地址: https://gitcode.com/GitHub_Trending/pa/Pake 每天打开 ChatGPT、音乐网站几个小时&#x…

2026/8/24 5:59:04 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →