如何用Python简化大量if/elif语句?以QUIDO板控制代码为例
优化QUIDO板输出控制代码的方案
你的代码存在大量重复逻辑,完全可以通过抽象变量和简化分支判断来大幅精简,同时提升可维护性。
简化后的核心代码
import requests def setOutput(output, action): # 校验输入范围,避免无效请求 if not 1 <= output <= 16: print(f"无效输出编号:{output},仅支持1-16") return if action not in (0, 1): print(f"无效操作指令:{action},仅支持0或1") return # 映射操作类型:1对应's'(设置),0对应'r'(重置) action_type = 's' if action == 1 else 'r' # 动态拼接请求URL url = f'http://192.168.1.254/set.xml?type={action_type}&id={output}' try: r = requests.get(url) r.raise_for_status() # 捕获HTTP请求错误 print(r.url) except requests.exceptions.RequestException as e: print(f"请求失败:{str(e)}") def myTimer(seconds): import time time.sleep(seconds) while True: setOutput(1, 1) myTimer(1) setOutput(1, 0) myTimer(1)
关键优化点
- 消除重复分支:不再为每个输出写单独的if判断,通过字符串格式化动态生成请求URL,把变化的
id和type参数作为变量代入 - 输入合法性校验:提前过滤无效的输出编号和操作指令,避免发送无意义的HTTP请求
- 异常处理:捕获网络请求可能出现的错误(如设备离线、网络中断),提升代码健壮性
- 逻辑集中:后续修改URL格式、扩展输出范围时,只需修改一处代码即可
进阶优化建议
- 抽离常量:把固定的基础URL定义为常量,方便后续修改设备地址:
BASE_QUIDO_URL = 'http://192.168.1.254/set.xml' # 生成URL时改为: url = f"{BASE_QUIDO_URL}?type={action_type}&id={output}"
- 批量操作支持:如果需要同时控制多个输出,可新增批量处理函数:
def setMultipleOutputs(output_list, action): for output in output_list: setOutput(output, action) # 使用示例:同时打开输出1、3、5 setMultipleOutputs([1,3,5], 1)
- 操作映射字典:如果后续操作类型扩展(比如新增暂停、切换等),用字典映射比三元表达式更易扩展:
ACTION_MAP = { 1: 's', 0: 'r', # 可新增其他操作类型 # 2: 'p' } action_type = ACTION_MAP.get(action) if not action_type: print(f"无效操作指令:{action}") return
内容的提问来源于stack exchange,提问作者Neo159
相关产品推荐
相关产品推荐

