如何使用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
相关产品推荐
相关产品推荐

