Python typing语法中Optional[Union]与含None的Union写法选用约定咨询
Python类型标注两种等价写法的选用规范
首先可以确认:Optional[Union[A, B]] 和 Union[A, B, None] 语义完全等价,所有类型检查工具对二者的处理逻辑没有任何区别。
相关的明确约定来自PEP 484规范:
PEP 484 中明确定义:
Optional[X]是Union[X, None]的等效语法糖。当 X 本身为联合类型时,该等价关系自然成立,因此Optional[Union[A, B]]可直接展开为Union[A, B, None]。
关于二者的选用,社区目前有统一的不成文约定:
- 如果想优先强调「该值可能为空」的属性,优先选择
Optional[Union[A, B]]写法,读者可以第一时间感知到None是该类型的可选附加属性 - 如果想表达「该值的可选范围是A、B、None三类平级情况」,优先选择
Union[A, B, None]写法,三种类型的优先级在写法上完全平等,逻辑更直观 - Python 3.10及以上版本中,更推荐使用管道运算符简化为
A | B | None,该写法兼顾了两种表述的优势,是目前社区主推的通用写法。
内容的提问来源于stack exchange,提问作者frediy
相关产品推荐
相关产品推荐

