我想将一个数学运算符以及要比较的数值传递给一个函数。这是我损坏的代码:
def get_truth(inp,relate,cut):
if inp print(relate) cut:
return True
else:
return False
并调用它
get_truth(1.0,'>',0.0)
应该返回 True。
我想将一个数学运算符以及要比较的数值传递给一个函数。这是我损坏的代码:
def get_truth(inp,relate,cut):
if inp print(relate) cut:
return True
else:
return False
并调用它
get_truth(1.0,'>',0.0)
应该返回 True。
看看操作员模块:
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
制作字符串和运算符函数的映射。此外,您不需要 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()
是邪恶的:为什么使用“评估”是一种不好的做法?
使用operator
模块。它包含您可以在 python 中使用的所有标准运算符。然后将运算符用作函数:
import operator
def get_truth(inp, op, cut):
return op(inp, cut):
get_truth(1.0, operator.gt, 0.0)
如果您真的想将字符串用作运算符,请按照@alecxe 的建议创建一个从字符串到运算符函数的字典映射。
请改用该operator
模块:
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 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
>>>