代码之家  ›  专栏  ›  技术社区  ›  Rui Nian

压缩一个Python方法,该方法根据传递的运算符进行不同的比较

  •  0
  • Rui Nian  · 技术社区  · 1 年前

    我试图编写一个计算语句的方法,但运算符(>,<,=)是由用户发送的。我想知道是否有一种简单的方法来写一个更简洁的方法。

    该代码的简化版本为:

    def comparsion(val1: int, val2: int, operator: str):
    
        if operator == ">":
            if val1 > val2:
                return True
    
        elif operator == "=":
            if val1 == val2:
                return True
    
        elif operator == "<":
            if val1 < val2:
                return True
    

    每种情况下唯一变化的是运算符,我想知道是否有更有效的方法来写这个。

    4 回复  |  直到 1 年前
        1
  •  4
  •   Barmar    1 年前

    使用 operator 模块,为所有标准运算符提供命名函数。然后,您可以使用字典将运算符字符串映射到相应的函数。

    from operator import lt, gt, eq
    
    ops = {'<': lt, '>': gt, '=': eq}
    
    def comparsion(val1: int, val2: int, operator: str):
        return ops[operator](val1, val2)
    
        2
  •  2
  •   JonSG    1 年前

    用字典帮你处理事情怎么样?

    def comparsion(val1: int, val2: int, operator: str):
        operations = {
            ">": val1 > val2,
            "=": val1 == val2,
            "<": val1 < val2
        }
        return operations[operator]
    
    print(comparsion(1, 2, ">"))
    print(comparsion(1, 2, "="))
    print(comparsion(1, 2, "<"))
    

    如果事情变得更复杂,字典中的值可能会被提升为lambdas。

        3
  •  0
  •   aszmajdzinski    1 年前

    如果只有三个操作员,我就不会尝试更复杂的操作。也许如果还有更多,你可以尝试一个字典,其中键是运算符,值是比较函数。

        4
  •  0
  •   wolfhide    1 年前

    这工作得很好:

    def comp(val1,val2,op):
        return eval(f"{val1}{op}{val2}")