-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")
有沒有一種方法來評估比較運算符作爲字符串傳遞的比較。沒有做很多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")
你應該避免使用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)
正如我在評論中提到的這是工作版本 – user1019129
您可以使用eval或更好的映射到操作符函數。你嘗試過什麼嗎?發生了什麼? – jonrsharpe
但這並不意味着我必須將其轉換爲字符串...然後我有其他類型的更復雜的類來比較。 – user1019129
將什麼轉換爲字符串?例如。 '「==」'*已經是一個字符串*。什麼*「更復雜的類」*;他們不執行'__eq__'嗎? – jonrsharpe