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

如何使用typing类型提示库组合多种类型?支持str或List[str]参数

如何在Python类型提示中组合多种类型

当然可以!在Python的typing模块里,我们有专门的工具来实现这种参数支持多种类型的需求,最常用的就是Union类型(Python 3.10+还支持更简洁的竖线|语法)。

针对你的核心需求:支持单个str或List[str]

如果你希望某个参数既能接受单个字符串,又能接受字符串列表,直接用Union[str, List[str]]就能搞定。举个实际的例子:

from typing import List, Union

def process_strings(input_data: Union[str, List[str]]) -> None:
    # 运行时可以用isinstance做类型判断
    if isinstance(input_data, str):
        print(f"处理单个字符串: {input_data}")
    else:
        print(f"处理字符串列表: {input_data}")

# 两种调用方式都符合类型提示要求
process_strings("hello world")
process_strings(["apple", "banana", "cherry"])

要是你用的是Python 3.10或更高版本,还能用上更直观的语法替代Union,代码会更清爽:

# Python 3.10+ 支持的写法
def process_strings(input_data: str | List[str]) -> None:
    # 实现逻辑和上面一致
    pass

结合你给出的代码示例修改

看你提供的run_ml函数,当前parameters的类型是Optional[Dict[str, List[str]]]——如果你的需求是让字典里的value既可以是单个str,也可以是List[str],那只要把类型改成Optional[Dict[str, Union[str, List[str]]]]就行,修改后的代码如下:

from typing import Dict, Optional, List, Union
# 假设Estimator是你已经定义好的机器学习估算器类型
def run_ml(
    estimator: Estimator,
    parameters: Optional[Dict[str, Union[str, List[str]]]] = None,
):
    # 这里写你的函数逻辑
    pass

这样parameters就可以是None,或是键为字符串、值为单个字符串/字符串列表的字典了,完全符合你的需求。

额外小技巧

如果你的代码里经常要用到这种“单个元素或元素列表”的类型,还可以自定义一个类型别名,让代码更简洁易读:

from typing import List, Union, TypeAlias

# 定义类型别名
StrOrStrList: TypeAlias = Union[str, List[str]]

# 之后就能直接用这个别名啦
def process_data(data: StrOrStrList) -> None:
    pass

内容的提问来源于stack exchange,提问作者JA-pythonista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:47:59