Python中有没有可以简化if-elif-else多分支判断语句的方法?
Python多elif分支简化方法
针对你这段月份映射的多elif代码,有3种常用的简化方案,按适用优先级排列:
- 方案1:列表索引(最适配当前连续整数映射场景)
你的月份取值为1~12的连续整数,直接用列表存储月份名称,通过偏移索引取值即可完全替换所有if-elif分支:
from random import randrange month = randrange(1, 13) month_names = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] print(month_names[month - 1])
因为Python列表索引从0开始,所以用month - 1即可和1~12的月份值一一对应,代码精简度最高。
- 方案2:字典映射(通用全场景,适配非连续/任意类型键的映射)
如果后续映射关系的键不是连续整数(比如自定义编号、字符串等),用字典做映射灵活度更高:
from random import randrange month = randrange(1, 13) month_map = { 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December" } print(month_map[month])
- 方案3:match-case语句(适配Python 3.10+版本,复杂分支逻辑场景更清晰)
如果你的分支下不止是打印输出,还有其他复杂处理逻辑,可以用Python 3.10推出的结构匹配语法替代多elif,可读性更强:
from random import randrange month = randrange(1, 13) match month: case 1: print("January") case 2: print("February") case 3: print("March") case 4: print("April") case 5: print("May") case 6: print("June") case 7: print("July") case 8: print("August") case 9: print("September") case 10: print("October") case 11: print("November") case 12: print("December")
额外提示:原代码中from random import *属于通配符导入,会导入random模块下所有内容,容易造成命名空间冲突,更推荐明确导入需要的randrange函数。
内容的提问来源于stack exchange,提问作者Dongook Kim
相关产品推荐
相关产品推荐

