PEP-484风格下,如何让Python函数返回类型依赖参数字面量?
基于参数字面量值确定Python函数返回类型的方法
要让函数返回类型根据参数的字面量值动态确定,你可以结合**函数重载(@overload)和字面量类型(Literal)**来实现,完全符合PEP-484规范。
具体实现步骤
- 导入所需的类型工具:
from typing import overload, Literal, list, int
- 用
@overload定义两种参数字面量对应的返回类型:
@overload def add_one(x: list[int], return_result: Literal[True]) -> list[int]: ... @overload def add_one(x: list[int], return_result: Literal[False]) -> None: ...
- 编写实际的函数实现,参数标注用普通
bool,返回类型可统一标注为list[int] | None(或留空让类型检查器自动推断):
def add_one(x: list[int], return_result: bool) -> list[int] | None: x[0] += 1 if return_result: return x
效果说明
- 当传入字面量
True时,类型检查器(如mypy、pyright)会明确推断返回类型为list[int] - 当传入字面量
False时,会推断返回类型为None - 如果传入的是一个普通
bool变量(非字面量),类型检查器仍会返回list[int] | None,这符合逻辑——因为变量的值在运行前无法确定
示例用法
my_list = [1, 2, 3] # 类型检查器识别返回值为list[int] modified_list = add_one(my_list, return_result=True) # 类型检查器识别返回值为None add_one(my_list, return_result=False)
内容的提问来源于stack exchange,提问作者BeeOnRope
相关产品推荐
相关产品推荐

