我想将一个数学运算符和要比较的数值传递给一个函数。这是我破碎的代码:
def get_truth(inp,relate,cut):
if inp print(relate) cut:
return True
else:
return False
并用
调用它get_truth(1.0,'>',0.0)
应返回True。
答案 0 :(得分:51)
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)):`