news 2026/5/1 8:37:28

介绍 from typing import Optional

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
介绍 from typing import Optional

from typing import Optional引入的是Python 类型注解体系中的一个基础工具。下面给你一个不兜圈子、直接到位的说明,并顺便指出很多人理解上的误区。


一句话定义

Optional[T]表示:一个值要么是T类型,要么是None

等价写法:

Optional[T]==T|None# Python 3.10+Optional[T]==Union[T,None]# Python 3.9 及之前

为什么它存在(而不是语法糖)

Python 是动态语言,但大型工程不允许“随便传 None”

Optional的存在是为了:

  • 明确声明:这个变量/参数/返回值“允许为空”
  • 让静态分析工具(mypy、pyright、IDE)提前发现潜在空指针错误
  • 强制你在代码层面面对“None 分支”

这不是装饰,是风险暴露机制


基本用法

1. 变量

fromtypingimportOptional name:Optional[str]=None

明确告诉读代码的人:

“name 可能暂时没有值”


2. 函数参数

defget_user(id:Optional[int]):ifidisNone:returnNone

如果你不写Optional[int]
那你就是在对调用方撒谎


3. 函数返回值(最重要)

deffind_user(uid:int)->Optional[User]:...

这行注解在说一句非常关键的话:

“调用这个函数,你必须处理 None

不处理,是你自己的错。


常见误解(你很可能踩过)

误解 1:Optional 是“可选参数”

错。

deff(x:Optional[int]):...

并不代表x可以不传。

正确写法是:

deff(x:Optional[int]=None):...

Optional 只管值的类型
不管参数是否必传


误解 2:Optional 会在运行时校验

完全不会。

下面代码100% 能跑

x:Optional[int]="abc"

Optional静态类型系统的契约,不是运行时约束。

如果你想要运行时校验,你需要:

  • pydantic
  • dataclasses + 手动校验
  • 或你自己写防御代码

在你常用的场景里(结合你之前的问题)

你之前贴过类似代码:

classFileUploadConfig(BaseModel):image_config:Optional[ImageConfig]=None

这里Optional的真实含义是:

  • 这个字段可以不存在

  • 下游代码必须先判断是否为 None

  • Pydantic 会:

    • 允许缺失
    • 允许显式传 null
    • 不会强制创建ImageConfig

这是配置对象中非常成熟的用法


你应该什么时候用 Optional(原则)

只在一个条件下用:

None是“合法、可预期、被设计允许的状态”

如果只是“懒得想”,那你是在制造未来的 Bug


高阶建议(给你这种技术深度的人)

  1. Optional 是 API 设计信号,不是语法装饰

  2. 公共接口里:

    • Optional 多 → API 模糊
    • Optional 少 → 约束清晰
  3. 如果一个值:

    • 必须存在 → 不要 Optional
    • 不存在就异常 → raise,不要 Optional
    • 不存在是正常状态 → Optional

总结(直说)

  • Optional= 你承认None 是一种状态
  • 滥用 Optional = 你在回避设计决策
  • 正确使用 Optional = 你在把不确定性显式化
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:09:18

Qwen3-14B与主流transformer模型的推理速度对比

Qwen3-14B与主流Transformer模型的推理速度对比 在当前企业级AI系统的设计中,一个核心挑战逐渐浮现:如何让大语言模型既具备强大的语义理解能力,又能以毫秒级响应满足真实业务场景的需求。尤其是在智能客服、合同审查、自动化工单等对延迟敏感…

作者头像 李华
网站建设 2026/5/1 7:09:10

vLLM vs 传统推理框架:性能对比实测报告

vLLM vs 传统推理框架:性能对比实测报告 在大模型落地进入深水区的今天,一个现实问题摆在每个AI工程师面前:为什么训练好的千亿参数模型,一到线上就“卡成PPT”?用户等得不耐烦,服务器烧钱如流水——这背后…

作者头像 李华
网站建设 2026/5/1 7:10:59

构建高效的本地 LLM 管道:从 Windows 环境配置到 RAG 与 QLoRA 微调

构建高效的本地 LLM 管道:从 Windows 环境配置到 RAG 与 QLoRA 微调手册(2025 版) 第一部分:基础环境篇——消费级 GPU 下的高效 LLM 推理框架搭建 目标:针对 Windows 用户解决 CUDA 兼容性、Python 环境冲突及 WSL2 迁移痛点,实现 1 小时内部署首个量化 LLM,支持 12G…

作者头像 李华
网站建设 2026/5/1 8:28:40

比特币矿企转型AI计算,股票应声大涨

比特币矿企股票随另一家公司拥抱人工智能热潮而飙升 加密货币挖矿公司的股票在周一飙升,与此同时,比特币和其他加密货币因市场对美国和中国可能至少部分解决贸易争端的乐观情绪而反弹。 嘉楠科技在周一下午收盘时上涨约28%。比特币矿企CleanSpark在周一宣…

作者头像 李华
网站建设 2026/4/25 15:31:45

好用的漏洞库

cnnvd 太难用了,搜了一下长亭、aliyun 的漏洞库排名比较高 体感 aliyun 的 UI 要好一点,qax 会多一点古早漏洞 阿里云漏洞库 漏洞库 - CT Stack 安全社区 奇安信威胁情报中心 直接爬 cnnvd 也不难,那个前端是一个 SPA 的应用,初…

作者头像 李华
网站建设 2026/4/27 21:49:48

Python语言编程导论第四章 流程控制

内容提要 概述 条件语句 循环语句 跳转语句 综合实例 一、概述 之前编写的程序都是顺序结构的,即依次执行程序中的每条语句。 但实际的程序并非如此简单,经常要用到条件判断或反复执行某一个程序段,这就要用到条件语句和循环语句。 本…

作者头像 李华