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

Python函数类型标注中`|`符号的作用是什么?

Python类型标注特殊写法说明

1. 你在builtins.py中看到的写法的本质

你看到的这类标注是**Python类型存根文件(.pyi)**的标准写法,这类文件只对外暴露函数的参数、返回值类型信息,不会写具体的函数实现,内置函数的实际逻辑是CPython底层的C代码实现,所以存根文件里会用...代替函数体和默认值的具体内容。

2. 各标注符号的具体含义

  • int | None:Python 3.10+引入的联合类型写法,等价于旧版本的Union[int, None],表示标注的目标可以是int类型,也可以是None值。
  • 参数后的= ...:在存根文件中表示该参数有默认值,只是默认值的具体定义不在当前存根文件中给出;如果在普通.py文件中写这个写法,Python解释器会把...识别为内置对象Ellipsis作为参数的默认值,运行时不会报错,但是会给静态类型检查工具传递「该参数是可选参数」的信息。
  • 函数末尾的-> int:返回值类型标注,明确说明该函数执行后应该返回int类型的结果。

3. 两种bar函数定义的核心区别

你给出的两种写法给类型检查工具、调用方传递的信息完全不同:

  • def bar(arg: int, arg1: int): ...:arg1是必填参数,调用时必须传值,且仅允许传入int类型,不允许传None,也没有默认值。
  • def bar(arg: int, arg1: int | None = ...) -> int: ...:arg1是可选参数,调用时可以不传(默认值为Ellipsis),传值时可以传入int或者None,同时明确标注了函数返回值为int类型。

4. 常见疑问说明

Python本身是动态类型语言,解释器默认不会校验类型标注的正确性,所以你写错标注也不会影响代码运行,这些标注的作用是给IDE智能提示、静态类型检查工具(比如mypy)使用的,提前在开发阶段发现类型不匹配的问题,避免运行时报错。
你写的示例代码存在类型风险:你标注了arg1可以是None,但代码里没有处理arg1为None或者默认Ellipsis的情况,直接做加法运算一定会报错,这类问题静态类型检查工具会直接给出提示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:15:08