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

Python中如何遍历不同Enum类组合并实现可扩展迭代?

解决方案

要实现可扩展的iterate()函数,核心思路是动态获取InputPermutation的参数类型注解,自动收集每个参数对应的Enum成员,再生成所有组合的笛卡尔积,这样无论新增Enum属性还是扩展Enum选项,函数都能自动适配。

完整代码实现:

from enum import Enum
import itertools
import inspect

class Colour(Enum):
    GREEN = "green"
    BLUE = "blue"
    RED = "red"

class Country(Enum):
    ENGLAND = "england"
    JAPAN = "japan"
    AUSTRALIA = "australia"

class InputPermutation:
    def __init__(self, colour: Colour, country: Country):
        self.colour = colour
        self.country = country

def main(input_permutation: InputPermutation) -> dict:
    colour = input_permutation.colour.value
    country = input_permutation.country.value
    result = {colour: country}
    return result

def iterate() -> dict:
    # 提取InputPermutation构造函数的参数类型(排除self)
    sig = inspect.signature(InputPermutation.__init__)
    enum_groups = []
    for param in sig.parameters.values():
        if param.name == "self":
            continue
        # 获取参数对应的Enum类,并收集所有成员实例
        enum_cls = param.annotation
        enum_groups.append(list(enum_cls))
    
    # 生成所有Enum组合的笛卡尔积
    all_combinations = itertools.product(*enum_groups)
    
    # 遍历组合,执行main并构建结果字典
    run_results = {}
    for run_idx, combo in enumerate(all_combinations, start=1):
        permutation = InputPermutation(*combo)
        run_results[run_idx] = main(permutation)
    
    return run_results

关键逻辑说明

  1. 动态获取参数类型:通过inspect.signature解析InputPermutation.__init__的参数,自动获取每个参数对应的Enum类,不需要硬编码参数名或Enum类型。
  2. 生成笛卡尔积:用itertools.product将所有Enum的成员做全组合,确保覆盖所有可能的配置。
  3. 自动适配扩展:
    • 若InputPermutation新增属性(比如加size: Size,其中Size是新Enum),函数会自动识别新参数并加入组合。
    • 若现有Enum新增选项(比如Colour加YELLOW),函数会自动包含该选项到所有相关组合中。

运行结果示例

调用iterate()会返回符合要求的字典:

{
    1: {'green': 'england'},
    2: {'green': 'japan'},
    3: {'green': 'australia'},
    4: {'blue': 'england'},
    5: {'blue': 'japan'},
    6: {'blue': 'australia'},
    7: {'red': 'england'},
    8: {'red': 'japan'},
    9: {'red': 'australia'}
}

内容的提问来源于stack exchange,提问作者k_1223

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:40:10