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

Python3.7用字典实现switch-case时所有分支全部执行问题求助

问题原因

你在构造switcher字典的时候,直接写了update_ip(v)和update_port(v),这属于直接调用函数,Python会在创建字典的瞬间就把两个函数都执行一遍,根本不会等你用get匹配key的时候才调用。所以不管你匹配到哪个key,两个函数早都已经跑完了,自然所有分支都会执行。

正确实现方式

要实现延迟调用,字典里应该存的是函数本身,而不是函数的执行结果,等匹配到对应key之后,再把参数传进去调用即可。以下是修改后的config_updater函数示例:

def config_updater(k, v):
    print(f'config_update(k,v): {k, v}')  # 合理性校验打印
    # 字典里存函数对象,不要加括号和参数
    switcher = {
        'ipaddress': update_ip,
        'port': update_port
    }
    # 先拿到匹配到的函数
    target_func = switcher.get(k)
    if target_func:
        # 拿到函数之后再传参数调用
        return target_func(v)

和原写法的核心区别是:原写法字典的value是函数执行后的返回值(这两个函数无返回值所以实际是None),字典创建阶段两个函数就已经执行完毕;修改后字典value是函数本身,只有匹配到对应key之后才会触发调用,不会执行多余分支。你后续更新的修正代码也采用了相同的逻辑,是完全正确的实现方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:24:03