3
A
回答
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
功能需要您始終使用昂貴的算法才能返回-1
,0
或1
。 函數OTOH告訴您哪個比較是有意的,因此您可以根據需要選擇昂貴的算法還是廉價的算法。
的tp_richcompare
另外一個優點是可以提高對操作沒有意義,如u < v
例外情況u
和v
是空間中的點。
相關問題
- 1. F#模塊擴展與類型擴展
- 2. 在Ruby中包含與擴展和可比較模塊
- 3. 在Angular2中擴展模塊TS類型
- 4. 擴展一個擴展類的模塊
- 5. 模塊#包含和模塊#擴展和模塊#前置比較討論
- 6. 擴展模型類
- 7. VB中的類與模塊的比較
- 8. 泛型類型參數如何表示「擴展」可比較不「實現」?
- 9. 擴展一個java比較來比較特定的類實現它比較了
- 10. 擴展模塊
- 11. 在OCaml中公開模塊擴展的私有類型
- 12. 比較擴展對象
- 13. Laravel中的可擴展模型
- 14. 用java泛型和接口擴展可比較件
- 15. 的CakePHP中可容納:模型「比較」是不是與模型「比較」相關
- 16. 擴展擴展類型
- 17. Ruby:一個擴展模塊的類
- 18. 如何創建類型E Java列表擴展可比較<? super E>
- 19. Autodesk forge中的FBX擴展模塊中的3D模型的紋理不可見
- 20. 模塊化擴展
- 21. 比較類型
- 22. Haskell中的類型比較
- 23. VB.NET中的類型比較
- 24. Python中的「類型比較」
- 25. 在collection.sort /可比較的代碼中,泛型<T的擴展如何擴展Comparable <? super T>>?
- 26. 可以在Typescript中擴展類型嗎?
- 27. 添加擴展模塊到groovy類
- 28. Kohana模塊化擴展可能像Codeigniter?
- 29. Java集合比較擴展,擴展接口相當的通用類
- 30. Django的擴展模型可選字段
+1,很好的解釋! – 2010-05-19 14:24:15
謝謝,這很清楚。我是否認爲如果我決定實施'tp_richcompare',我還應該實現'tp_compare'來支持內置的'cmp'功能? – 2010-05-19 14:27:27
@詹姆斯:好問題;我真的不知道。我會冒險猜測'cmp'沒有利用豐富的比較函數,因爲它太笨拙了,特別是因爲沒有假設富比較之間的關係('<'不必與'> ='相反) )。 – 2010-05-19 14:42:32