2017-06-14 77 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