使用mypy类型检查时,Union类型函数参数如何设置默认值?
正确的类型标注+默认值写法
嘿,这个坑我之前踩过!你把默认值的位置放错啦——默认值是属于函数参数的属性,不是Union类型的一部分,所以不能写到Union的括号里。
正确的基础语法写法
直接把默认值放在整个类型标注的后面就可以了,示例如下:
from typing import Union, List def your_function(x: Union[int, List[int]] = 10) -> None: # 这里写你的函数逻辑 if isinstance(x, int): print(f"单个整数: {x}") elif isinstance(x, list): print(f"整数列表: {x}")
Python 3.10+ 更简洁的写法
如果你用的是Python 3.10及以上版本,还可以用PEP 604引入的|运算符替代Union,代码会更清爽,mypy完全支持这个语法:
def your_function(x: int | List[int] = 10) -> None: # 函数逻辑同上 pass
为什么你的写法无效?
Union[int = 10, List[int]]这种写法是错误的,因为Union的作用是定义一组可选的类型集合,它的参数只能是类型对象,不能带默认值这种参数属性。默认值是给函数参数本身设置的,所以必须放在类型标注的外侧,用=直接赋值。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

