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

Union 和 Optional 区别

最近在学习fastAPI,在学习查询参数(请求参数)的时候对这个很疑惑,学习一下

1. Union

Union 出自 Python 的 typing 模块,用来表示 一个变量 / 参数 / 返回值可能有多种类型
语法:

from typing import Uniondef func(x: Union[int, str]) -> Union[str, list]:if isinstance(x, int):return str(x)       # 返回 strelse:return [x]          # 返回 list

这里 Union[int, str] 就表示 x 既可以是 int 也可以是 str

  • 静态类型检查器(如 mypy、pyright)会在分析时帮你检查。

  • 运行时 Union 并不会强制限制,它只是个 类型提示

Python 3.10 以后,Union 可以用 管道符号 | 简写:

def func(x: int | str) -> str | list:...

2. Optional

Optional 本质就是 Union[SomeType, None] 的语法糖。
语法:

from typing import Optionaldef get_name(flag: bool) -> Optional[str]:if flag:return "Alice"else:return None

等价于:

def get_name(flag: bool) -> Union[str, None]:...

所以:

  • Optional[T] = Union[T, None]

  • 你只在需要允许 None 的地方用它,语义更清晰。


3. 区别总结

  • Union:多种可能类型(至少 2 种及以上)。
    例:Union[int, str, list]

  • Optional:某个类型 + None 的简写。
    例:Optional[str] = Union[str, None]

所以说,OptionalUnion特例


4. 实战中的最佳实践

  • 当参数或返回值里可能出现多种不同类型 → 用 Union

    def load_config(path: str) -> Union[dict, list]:...
    
  • 当参数或返回值要么是某类型,要么就是 None → 用 Optional

    def find_user(id: int) -> Optional[str]:...
    

5. 一个常见坑

很多人会写:

def foo(x: Optional[str] = ""):...

其实这个没意义,因为默认值是 "",永远不会是 None
如果你真要允许 None,应该写:

def foo(x: Optional[str] = None):...

Union、Optional 的价值主要在 可读性静态类型检查

http://www.dtcms.com/a/428103.html

相关文章:

  • 太原网站建设鸣蝉公司中建官网
  • Redis List 类型全解析
  • 服务器做jsp网站教程视频城市介绍网站模板
  • 做网站一定需要虚拟主机吗自建网站定位
  • CompletableFuture原理与实践----商品信息查询接口优化---信息组装
  • 深圳求职网站哪个好网站对接微信接口
  • Cause: java.sql.SQLException: 无效的列类型: 1111
  • IMU传感器价格与高精度组合惯导市场现状分析
  • (28)ASP.NET Core8.0 SOLID原则
  • API 接口开发与实时实时采集构建京东商品数据通道方案
  • 做网销的网站移动网站 模板
  • 某短视频 sig3 逆向纯算分析
  • CMSIS设计的理解
  • 串扰06-近端串扰的大小
  • 哪些网站是做食品网站前台设计方案
  • 达州市网站建设wordpress文章与页面
  • Powershell维护系统管理任务(五)
  • 美团滑块-[behavior] 加密分析
  • 泉州专业建站单位网站建设实施方案
  • 动作捕捉技术与服务 | 推动人形机器人实现规模化高质量数据采集与训练
  • 网站开发软件有哪设计师网络叫法
  • 服务类网站开发中山家居企业网站建设
  • 【Android】Kotlin.flow在主线程collect为什么不阻塞主线程?
  • 数据整合展示中心
  • 阜宁网站制作哪家好我公司想做网站
  • Spring IOC源码篇七 核心方法obtainFreshBeanFactory自定义标签
  • 在哪里找做网站的客户郴州网络营销
  • 产生式规则对人工智能中自然语言处理深层语义分析的影响与启示研究
  • 南宁专业网站开发潍坊市网站制作
  • 网站后台登录密码修改自己网站做问卷调查