避免冗长elif判断链,实现ID匹配逻辑的高效化与动态化改造
实现代码
你可以直接取两个列表的最小长度作为遍历上限,通过索引遍历完成匹配,完全符合你要求的for x in range(amount)形式,代码如下:
api = [1232312, 123123, 1231231] IDList = [-100123123, 100123123, 100123123] # 取两个列表最小长度作为遍历上限,避免索引越界,自动适配ID和api的数量 amount = min(len(IDList), len(api)) try: for x in range(amount): if chatid == IDList[x]: # 注意你原代码中索引为1的分支是给api属性赋值,其余给id属性赋值,如为笔误可删除判断直接统一赋值id if x == 1: my_event_handler.api = api[x] else: my_event_handler.id = api[x] print(f"hook{x+1}") # 匹配成功直接跳出循环,避免无效遍历 break except Exception as e: # 按需补充异常处理逻辑即可 pass
优化说明
- 自动适配数量:后续新增ID只需在
IDList和api列表对应位置添加元素即可,不需要修改匹配逻辑,hook标识会自动递增 - 代码精简:删除了冗余的多分支判断,维护成本更低
- 兼容边界:取两个列表的最小长度作为遍历上限,避免出现索引越界问题
如果你不需要严格使用range遍历,更推荐用enumerate写法,可读性更高:
try: for idx, target_id in enumerate(IDList): if chatid == target_id: if idx == 1: my_event_handler.api = api[idx] else: my_event_handler.id = api[idx] print(f"hook{idx+1}") break except IndexError: # 处理api列表长度不足的情况 pass
内容的提问来源于stack exchange,提问作者Rynixx
相关产品推荐
相关产品推荐

