讲师中心 微信公众号
AI工具推荐 视频效率加速

Python typing 模块的核心用法

千辰君_8573

千辰君_8573

发布时间:2026-01-30 20:32:35

|

343人浏览过

|

来源于php中文网

原创

Python 3.9+ 推荐直接用 list[str]、dict[str, int] 等内置泛型类型注解,typing.List 等已弃用;Optional[T] 可写作 T | None;Union 与 | 行为有差异;Literal 限字面值,Final 防意外重赋值;Protocol 实现结构化鸭子类型。

python typing 模块的核心用法

typing.List、typing.Dict 这些写法已经过时了

Python 3.9+ 可以直接用内置类型 list、dict、set、tuple 做类型注解,不需要再从 typing 导入。比如:def f(x: list[str]) -> dict[str, int]: ... 是合法且推荐的写法。

旧写法如 typing.List[str] 在 3.9+ 仍能运行,但被标记为 deprecated;3.12 开始部分 IDE 和类型检查器(如 mypy)会发出警告。

  • 3.9 之前必须用 typing.List 等,因为内置类型不支持泛型参数
  • 若项目需兼容 3.8 或更早,保留 typing 导入,但建议加 from __future__ import annotations 延迟求值
  • typing.Optional[T] 已可统一写作 T | None(PEP 604),但注意 mypy 默认未启用该语法,需加 --enable-error-code operator 或配置文件开启

Union 和 | 的行为差异容易踩坑

| 是类型联合运算符,本质是 types.UnionType 实例,在运行时不是 typing.Union;而 typing.Union[A, B] 在 3.10+ 会被自动转换为 A | B 形式,但二者在反射和类型检查逻辑中可能表现不同。

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
  • 用 isinstance(x, Union[A, B]) 会报错:Union 不是运行时可检查的类型,应改用 isinstance(x, (A, B))
  • get_origin(T) 对 A | B 返回 types.UnionType,对 Union[A, B] 返回 typing.Union,做类型元编程时需分别处理
  • 嵌套联合如 A | (B | C) 会被自动展平为 A | B | C,但 Union[A, Union[B, C]] 不会自动展平,语义上等价但结构不同

Literal 和 Final 的实际用途很具体

Literal 用于限定变量或参数只能取几个固定字面值,常用于函数重载、状态机、API 字段校验;Final 表示变量不应被重新赋值(仅对模块级/类属性有效),不阻止运行时修改,纯属类型提示。

立即学习“Python免费学习笔记(深入)”;

  • def connect(protocol: Literal["http", "https", "ws"]) -> None: 能让 IDE 在调用时高亮非法字符串,mypy 也会报错
  • MAX_RETRY: Final = 3 配合 mypy 的 --warn-unused-ignores 可捕获意外赋值,但 MAX_RETRY = 5 在运行时不会出错
  • Literal 不支持变量,只能是字面量(如 "a"、1、True),不能是 const = "a"; x: Literal[const]

Protocol 是鸭子类型的形式化,但别滥用

Protocol 允许你定义“只要具备某些方法就算符合类型”,不用继承或注册,适合对接第三方库或松耦合接口。但它不是运行时检查机制,只在静态检查阶段起作用。

  • 定义 class Drawable(Protocol): def draw(self) -> None: ... 后,任何有 draw() 方法的对象都可通过类型检查
  • 协议类里不能有实例变量(除非标注 __slots__ = ()),也不能有 __init__,否则 mypy 会报 Protocol cannot have non-method members
  • 协议默认是协变的,若需逆变或不变,得显式加 class Proto(Protocol, Contravariant=True),但极少需要
真正难的不是记住 typing 有哪些类型,而是判断什么时候该用 Protocol 而不是抽象基类,什么时候该用 TypeVar 绑定泛型而不是硬编码类型,以及如何让类型提示既准确又不增加维护负担——这些往往取决于你正在写的那行代码到底想约束什么、谁会用它、以及类型检查器是否真能帮上忙。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6244

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3264

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1872

2025.10.17

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6244

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3264

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1872

2025.10.17

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1029

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3240

2023.10.25

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn