如何将运算符传递给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有什么问题吗???你对所有给出使用evaleval()的有效解决方案的人都投了反对票
会带来安全风险,当人们不知道有更好的选项存在时,它就被过度用作“解决方案”。最后,我放弃了我的函数并使用了运算符。“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
>>>