答案here給出了您希望__ne__
返回除__eq__
的邏輯逆之外的其他情況的手寫參考,但我無法想象出任何此類情況。任何例子?爲什麼Python有一個__ne__運算符方法而不是__eq__?
36
A
回答
28
SQLAlchemy就是一個很好的例子。對於未初始化的,SQLAlchemy是一個ORM並使用Python表達式來生成SQL語句。在表達如
meta.Session.query(model.Theme).filter(model.Theme.id == model.Vote.post_id)
的model.Theme.id == model.VoteWarn.post_id
不返回一個布爾值,但最終能產生像WHERE theme.id = vote.post_id
一個SQL查詢的對象。反過來會產生類似於WHERE theme.id <> vote.post_id
的東西,所以這兩種方法都需要定義。
29
一些圖書館花哨的東西,並沒有從這些操作返回布爾。例如,對於numpy的:
>>> import numpy as np
>>> np.array([1,2,5,4,3,4,5,4,4])==4
array([False, False, False, True, False, True, False, True, True], dtype=bool)
>>> np.array([1,2,5,4,3,4,5,4,4])!=4
array([ True, True, True, False, True, False, True, False, False], dtype=bool)
當比較的陣列,以一個單一的值或另一個陣列你回到比較相應的元件的結果的布爾變量的陣列。如果x!=y
僅僅等於not (x==y)
,則無法執行此操作。
8
更一般地,在many valued logic系統中,equals
和not equals
不一定彼此精確相反。
明顯的例子是SQL,其中True == True
,False == False
和Null != Null
。雖然我不知道是否有任何特定的Python示例,但我可以想象它是在某些地方實現的。
+1
而在MYSQL中,你甚至可以同時擁有'NULL'和'NOT NULL'的值!!! 1! (儘管我認爲這是MySQL的一個設計錯誤) – 2012-02-26 20:31:13
相關問題
- 1. python total_ordering:爲什麼__lt__和__eq__而不是__le__?
- 2. 爲什麼右移運算符產生一個零而不是一個?
- 3. 'is'運算符爲什麼說這些方法不一樣?
- 4. 爲什麼typeof被稱爲運算符而不是函數?
- 5. 爲什麼使用'op_Addition'作爲運算符'+'而不是名稱'+'?
- 6. 爲什麼在選擇方法中使用OR運算符而不是AND運算符?
- 7. 定義一個運算符「距離」而不是運算符「in」與Python集合
- 8. 爲什麼一個lamba表達式與運算符工作,而不是其他
- 9. 爲什麼賦值運算符返回一個值而不是引用?
- 10. 爲什麼Ruby使用=〜而不是〜=來匹配運算符?
- 11. 爲什麼++運算符將整數增加4而不是1?
- 12. 爲什麼使用new運算符而不是std :: vector?
- 13. 爲什麼這個(〜=)被認爲是一個前綴運算符?
- 14. 爲什麼調用這個方法而不是另一個?
- 15. 是否有重新定義行爲的方法。一個python類的運算符?
- 16. 是一個變量符號,一個方法,爲什麼這有一個冒號,而不是?
- 17. python中的%運算符是什麼?
- 18. 在Python中,「〜〜」運算符是什麼?
- 19. python < - 運算符:是什麼意思?
- 20. Python中爲什麼不是「和」和「或」運算符?
- 21. Python - __eq__方法不被調用
- 22. 爲什麼equals()方法當我們有==運算符?
- 23. 覆蓋sqlalchemy中的__eq__運算符
- 24. 爲什麼python datetime類有'fromtimestamp'方法,但不是'totimestamp'方法?
- 25. 爲什麼我的語法適用於*, - ,/等運算符,而不是+?
- 26. 爲什麼我可以使用If Else語法而不是三元運算符?
- 27. 爲什麼UIActionSheet init方法接受一個字符串數組而不是NSString
- 28. 爲什麼FrameworkElement的FindResource()方法接受一個對象而不是字符串?
- 29. 爲什麼Tensorflow不會覆蓋__eq__?
- 30. 運算符+ =重載,爲什麼是const?
至少對''''和'<='有這樣的情況。即'NaN < anything => false'和'NaN> = anything => false'。 (假設python遵循IEEE浮點邏輯) – CodesInChaos 2012-02-26 11:04:09
是的,基本上任何沒有[total order](http://en.wikipedia.org/wiki/Total_ordering)的東西都可以歸入這個類別。由於顯而易見的原因,這些東西很少見,但它們確實存在。 NaN是一個很好的例子。 – Voo 2012-02-26 11:09:48
只因爲你能。 – 2012-02-26 11:24:25