使用元组作为默认参数时的类型标注问题
解决元组默认参数的类型标注问题
你可以通过变长元组类型标注来解决这个问题,不需要改用None作为默认值。具体来说,在Tuple类型中添加...来表示该元组可以包含任意数量指定类型的元素,语法如下:
from typing import Tuple, Literal def run_package(some_settings: Tuple[Literal["setting_1", "setting_2", "setting_3"], ...] = ("setting_1",)): pass
其他可选方案
- 如果不需要严格限定参数必须是元组,也可以用
Sequence类型标注,它兼容元组和列表,同时保持默认值为元组:from typing import Sequence, Literal def run_package(some_settings: Sequence[Literal["setting_1", "setting_2", "setting_3"]] = ("setting_1",)): pass - 还可以提前定义类型别名,让代码更简洁:
from typing import Tuple, Literal SettingType = Literal["setting_1", "setting_2", "setting_3"] def run_package(some_settings: Tuple[SettingType, ...] = ("setting_1",)): pass
这些方案都能保留元组作为默认参数的直观写法,同时满足类型标注要求,避免可变默认参数的潜在问题。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

