我注意到operator.itemgetter
對象沒有定義__eq__
,所以它們的比較默認爲檢查標識(is
)。比較itemgetter對象
將兩個itemgetter
實例定義爲平等,每當它們的初始化參數列表比較爲相等時,是否有任何缺點?
下面是這種比較的一個用例。假設您定義了一個有序的數據結構,其構造函數需要一個鍵函數來定義排序。假設您想檢查兩個這樣的數據結構是否具有相同的鍵功能(例如,在assert
語句中;或者驗證它們是否可以安全合併等)。
這將是很好,如果我們可以肯定地回答這個問題,當兩個關鍵功能是itemgetter('id')
。但目前,itemgetter('id') == itemgetter('id')
將評估爲False
。
我看不出這將是有益的...這說,看到'itemgetter'是在C中定義的,你可以共同攻擊一個類來覆蓋'__getitem__',然後運行這兩個getter來檢查是否訪問了同一個項目。這不是一個優雅或快速的解決方案,但我看不出如何做得更好。 – 2012-04-02 02:45:38
@NiklasB。我更新了這個問題,爲此提供了動力。 – max 2012-04-02 02:53:06
在這種情況下,我會使用'lambda'表達式。 – satoru 2012-04-02 02:56:34