如何将操作符传递给python函数?

时间:2013-09-03 11:58:25

标签: python function python-2.7

我想将一个数学运算符和要比较的数值传递给一个函数。这是我破碎的代码:

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

并用

调用它
get_truth(1.0,'>',0.0)

应返回True。

5 个答案:

答案 0 :(得分:51)

查看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

答案 1 :(得分:33)

制作字符串和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

仅供参考,eval()是邪恶的:Is using eval in Python a bad practice?

答案 2 :(得分:11)

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

import operator

def get_truth(inp, op, cut):
    return op(inp, cut):

get_truth(1.0, operator.gt, 0.0)

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

答案 3 :(得分:-1)

>>> 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
>>>

答案 4 :(得分:-2)

您想使用eval

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