如何将运算符传递给python函数?

如何将运算符传递给python函数?,python,function,python-2.7,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。使用操作符模块。它包含可以在python中使用的所有标准运算符。然后将运算符用作函数: import operato

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

def get_truth(inp,relate,cut):    
    if inp print(relate) cut:
        return True
    else:
        return False
并称之为

get_truth(1.0,'>',0.0)

它应该返回True。

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

import operator

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

get_truth(1.0, operator.gt, 0.0)
如果确实想使用字符串作为运算符,请按照@alecxe的建议创建一个从字符串到运算符函数的字典映射。

请查看:


改用
操作员
模块:

import operator
def get_truth(inp, relate, cut):
    rel_ops = {
        '>': operator.gt,
        '<': operator.lt,
        '>=': operator.ge,
        '<=': operator.le,
        '==': operator.eq,
        '!=': operator.ne
    }
    return rel_ops[relate](inp, cut)
导入操作符
def获取真相(inp、关联、切割):
相关操作={
“>”:operator.gt,
“=”:operator.ge,

“对字符串和函数进行映射。此外,不需要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
导入操作符
def获取真相(inp、关联、切割):
ops={'>':operator.gt,
“=”:operator.ge,
'',0.0)#打印正确
打印(获取真值(1.0,'=',0.0))#打印真值

print(get_truth(1.0,“+1)。此外,此答案表明您可以直接返回
ops[relate]的值
,而不是显式地测试它并返回文本
True
False
。我建议将
=
替换为
=
漂亮!但是请使用
=
进行比较!@PaulEvans:因为映射
谢谢@PaulEvans。我将使用操作符方法,原因如下所述:不,请这样做当有更好的解决方案可用时,不要使用
eval()
。你的eval有什么问题吗???你对所有给出使用eval
eval()的有效解决方案的人都投了反对票
会带来安全风险,当人们不知道有更好的选项存在时,它就被过度用作“解决方案”。最后,我放弃了我的函数并使用了运算符。“if operator.gt(1.0,0.0):“难道你不能只使用
if 1.0>0.0:
?我希望能够动态更改运算符(因此,我可能必须返回函数解决方案)。对于
运算符中的
,请参见
运算符。包含(a,b)
。请注意,这将检查a中是否存在b,而不是相反。
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
>>> 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
>>>