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
相关产品推荐
相关产品推荐

