You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python docstring中编写“A或B”类类型提示的正确方式是什么?

问题1:仅能取"E"/"H"的参数标注

你用的是NumPy风格的函数文档字符串格式,你列的写法里唯一符合标准规范的是以下写法:

name : str
    {'E', 'H'}

其他写法的问题说明:

  • 直接把集合、列表、Union、or写法放在类型行(和name :同一行),缺少了最基础的str类型标注,不符合文档字符串的参数说明逻辑
  • 用[]包裹可选值是错误用法,方括号在文档字符串类型标注中一般用来表示序列/数组类型,不是枚举可选值
  • 'E' | 'H'、Union['E', 'H']、'E' or 'H'这三种写法语义完全错误:|和Union是用来做类型联合的,不是用来枚举字面量取值的;or是Python逻辑运算符,放在这里没有参数取值限制的语义。

如果需要让静态类型检查器也能识别这个参数的取值限制,可以额外在函数定义的类型提示里用Literal:

from typing import Literal

def my_func(name: Literal["E", "H"]):
    """
    Parameters
    ----------
    name : str
        {'E', 'H'}
    """

问题2:int或float的类型标注

你列的写法里正确的是Union[int, float]:

param : Union[int, float]

如果你用的是Python 3.10及以上版本,还可以用更简洁的类型联合写法:

param : int | float

其他写法的问题说明:

  • int or float:or是逻辑运算符,运行时会直接返回第一个真值int,绝大多数类型检查器都不识别这种写法,属于非标准的野路子写法
  • [int | float]:方括号表示序列类型,这个写法的语义是「参数是一个列表,列表元素为int或float」,和你要的「参数本身是int或float」语义不符
  • {int, float}:集合写法在这里的语义是「参数的可选取值为int、float两个类型对象」,和类型联合的语义完全不同。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:15:05