2017-06-14 46 views
-2

有没有一种方法来评估比较运算符作为字符串传递的比较。没有做很多if-else的。 F.E.eval String-cmp-operator?

def cmp(arg1, op, arg2) : ...... 

然后:

cmp(5, "==", 6) 
cmp(7, ">", 6) 
cmp(12, "<=", 34) 
cmp("abc", "==", "bad") 
+2

您可以使用eval或更好的映射到操作符函数。你尝试过什么吗?发生了什么? – jonrsharpe

+0

但这并不意味着我必须将其转换为字符串...然后我有其他类型的更复杂的类来比较。 – user1019129

+0

将什么转换为字符串?例如。 '“==”'*已经是一个字符串*。什么*“更复杂的类”*;他们不执行'__eq__'吗? – jonrsharpe

回答

3

你应该避免使用eval,使用的操作模块来代替。

import operator 
ops = { 
    '<': operator.lt, 
    '<=': operator.le, 
    '==': operator.eq, 
    '!=': operator.ne, 
    '>=': operator.ge, 
    '>': operator.gt 
} 

def cmp(arg1, op, arg2): 
    operation = ops.get(op) 
    return operation(arg1, arg2) 
+0

正如我在评论中提到的这是工作版本 – user1019129