2010-05-19 55 views

回答

6

tp_richcompare類似於Python語言本身的豐富比較special methods。當在類上調用比較運算符時,優先選擇tp_compare

當您希望更好地控制比較邏輯時,使用tp_richcompare。例如,確定平等可能是一種非常便宜的方法,但不是優先。假設memcmp(a, b, sizeof(*a)) == 0表示兩個非常複雜的數據結構相等,但memcmp(a, b, sizeof(*a)) < 0並不表示a小於b,而這需要一個昂貴的算法來確定。 tp_compare功能需要您始終使用昂貴的算法才能返回-101。 函數OTOH告訴您哪個比較是有意的,因此您可以根據需要選擇昂貴的算法還是廉價的算法。

tp_richcompare另外一個優點是可以提高對操作沒有意義,如u < v例外情況uv是空間中的點。

+0

+1,很好的解釋! – 2010-05-19 14:24:15

+1

謝謝,這很清楚。我是否認爲如果我決定實施'tp_richcompare',我還應該實現'tp_compare'來支持內置的'cmp'功能? – 2010-05-19 14:27:27

+0

@詹姆斯:好問題;我真的不知道。我會冒險猜測'cmp'沒有利用豐富的比較函數,因爲它太笨拙了,特別是因爲沒有假設富比較之間的關係('<'不必與'> ='相反) )。 – 2010-05-19 14:42:32