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

如何通过类switch语句优化Python多分支if-elif代码

Python多分支if-elif优化为类switch实现

首先要指出原代码的逻辑错误:你写的条件判断存在语法问题,比如if "int" or "tinyint" in val等价于if ("int") or ("tinyint" in val),非空字符串"int"本身是布尔真值,导致这个条件永远成立,后续的elif分支根本不会执行。正确的写法应该是"int" in val or "tinyint" in val,同理第二个elif的条件也需要修正为每个字符串都做in val判断。

针对这个函数,我们可以用字典映射的方式模拟switch语句的效果,让代码更简洁易维护,下面提供两种常用方案:

方案一:处理包含匹配(适用于val带额外参数的场景)

如果val是类似int(11)、varchar(255)这种包含类型关键字的字符串,需要判断是否包含指定关键字,我们可以按优先级定义匹配规则列表,遍历检查:

def col_type_generator(self, val):
    # 按匹配优先级定义规则:(关键字集合, 返回值)
    type_rules = [
        ({"int", "tinyint"}, " A"),
        ({"longtext", "mediumtext", "text", "tinytext", "json"}, " B"),
        ({"varchar"}, " C"),
        ({"bit"}, " D"),
        ({"datetime"}, " E")
    ]
    # 遍历规则,找到第一个匹配项
    for keywords, result in type_rules:
        if any(key in val for key in keywords):
            return result
    # 无匹配时返回默认值
    return "UNKNOWN COLUMN TYPE"

方案二:精确匹配(适用于val是纯类型名称的场景)

如果val就是精确的类型名称(比如"int"、"json"),不需要做包含判断,直接用字典查找效率更高:

def col_type_generator(self, val):
    type_map = {
        "int": " A",
        "tinyint": " A",
        "longtext": " B",
        "mediumtext": " B",
        "text": " B",
        "tinytext": " B",
        "json": " B",
        "varchar": " C",
        "bit": " D",
        "datetime": " E"
    }
    # get方法找不到键时返回默认值
    return type_map.get(val, "UNKNOWN COLUMN TYPE")

这两种方案都比冗长的if-elif更简洁,后续要新增或修改类型规则时,只需要调整字典或规则列表即可,维护成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:43:31