代码之家  ›  专栏  ›  技术社区  ›  Marius

python:如何在函数中输入比较运算符[重复]

  •  0
  • Marius  · 技术社区  · 7 年前

    我想将一个数学运算符以及要比较的数值传递给一个函数。这是我的密码:

    def get_truth(inp,relate,cut):    
        if inp print(relate) cut:
            return True
        else:
            return False
    

    并称之为

    get_truth(1.0,'>',0.0)
    

    这应该是真的。

    0 回复  |  直到 9 年前
        1
  •  51
  •   grc    13 年前

    看看 operator module :

    import operator
    get_truth(1.0, operator.gt, 0.0)
    
    ...
    
    def get_truth(inp, relate, cut):    
        return relate(inp, cut)
        # you don't actually need an if statement here
    
        2
  •  32
  •   Community Mohan Dere    9 年前

    对字符串和 operator 功能。此外,您不需要if/else条件:

    import operator
    
    
    def get_truth(inp, relate, cut):
        ops = {'>': operator.gt,
               '<': operator.lt,
               '>=': operator.ge,
               '<=': operator.le,
               '=': operator.eq}
        return ops[relate](inp, cut)
    
    
    print get_truth(1.0, '>', 0.0)  # prints True
    print get_truth(1.0, '<', 0.0)  # prints False
    print get_truth(1.0, '>=', 0.0)  # prints True
    print get_truth(1.0, '<=', 0.0)  # prints False
    print get_truth(1.0, '=', 0.0)  # prints False
    

    FYI eval() 邪恶: Is using eval in Python a bad practice?

        3
  •  11
  •   Viktor Kerkez    13 年前

    使用 operator 模块。它包含可以在Python中使用的所有标准运算符。然后使用运算符作为函数:

    import operator
    
    def get_truth(inp, op, cut):
        return op(inp, cut):
    
    get_truth(1.0, operator.gt, 0.0)
    

    如果您真的想使用字符串作为运算符,那么按照@alecxe的建议创建一个从字符串到运算符函数的字典映射。

        4
  •  -1
  •   amadain    13 年前
    >>> def get_truth(inp,relate,cut):
    ...     if eval("%s%s%s" % (inp,relate,cut)):
    ...         return True
    ...     else:
    ...         return False
    ...
    >>> get_truth(1.0,'>',0.0)
    True
    >>>
    
        5
  •  -2
  •   Paul Evans    13 年前

    你想用 eval :

    if eval(str(inp) + relate + str(cut)):`