如何简化根据传入运算符执行不同比较逻辑的Python方法
如何简化根据传入运算符执行不同比较逻辑的Python方法
这问题我之前写业务代码时也碰到过!你的思路没问题,但确实可以用Python的特性把代码简化不少,而且扩展性还能提升一大截。
核心思路是用字典映射:把用户传入的运算符字符串,直接对应到对应的比较逻辑(函数或者lambda表达式),这样就不用写一堆重复的if-elif分支了。下面给你两种常用的实现方案:
方案1:用Python内置的operator模块(推荐)
Python的operator模块提供了现成的比较函数,比自己写lambda更规范高效,代码如下:
import operator def comparison(val1: int, val2: int, operator: str): # 建立运算符到内置比较函数的映射 op_map = { ">": operator.gt, # 对应 a > b "=": operator.eq, # 对应 a == b "<": operator.lt # 对应 a < b } # 从映射中获取函数,若运算符不支持则默认返回False return op_map.get(operator, lambda x, y: False)(val1, val2)
方案2:用lambda表达式(无需额外导入)
如果不想导入模块,用lambda表达式直接写比较逻辑也很简洁:
def comparison(val1: int, val2: int, operator: str): op_map = { ">": lambda a, b: a > b, "=": lambda a, b: a == b, "<": lambda a, b: a < b } return op_map.get(operator, lambda x, y: False)(val1, val2)
额外优化:处理非法运算符
上面的代码会对不支持的运算符返回False,如果你想更严谨,比如抛出异常提示非法输入,可以改成这样:
import operator def comparison(val1: int, val2: int, operator: str): op_map = { ">": operator.gt, "=": operator.eq, "<": operator.lt } try: return op_map[operator](val1, val2) except KeyError: raise ValueError(f"不支持的运算符: {operator}") from None
这种写法的好处不止是代码短:后面如果要新增支持的运算符(比如>=、<=),只需要在op_map里加一行键值对就行,不用再修改分支判断,扩展性拉满~
备注:内容来源于stack exchange,提问作者Rui Nian
相关产品推荐
相关产品推荐

