2015-10-23 115 views
0

之間有什麼原始類型比較對象比較的基本區別Python的基本類型比較V/S對象比較

我想比較兩個日期,它很容易通過原始類型,然後我爲什麼要創建完成對象和比較對象?

import datetime 
fmt = '%Y-%m-%d' 
d = '2015-10-23' 
e = '2015-10-23' 
d == e ==> True 

d1 = datetime.datetime.strptime(d,fmt) 
d2 = datetime.datetime.strptime(e,fmt) 
d1 == d2 ==> True 

d = '2015-10-03' 
e = '2015-10-04' 
d > e ==> False 
e > d ==> True 

如果原始類型工作正常,那麼爲什麼我們需要爲此創建對象?

哪一個更好用?

+4

如果你的日期是在同一個明智的格式,然後字符串比較(甚至字典序)將正常工作,但*如果他們」什麼不是*?而且,如果你想要例如減去兩者以找出它們之間的'timedelta';祝你好運,用字符串做。 – jonrsharpe

回答

1

如果日期格式不合理,原始類型比較可能會導致錯誤結果答案。

E.g

d = '2015-33-03' 
e = '2015-32-32' 
print(d > e) 
print(e > d) 
1

您列出的格式被稱爲isoformat

您可以致電dateObj.isoformat()查看此信息。

在ISO格式(yyyy-mm-dd)中,您確實在比較日期的字符串等效性,所以恰好給出了與字符串比較相同的結果...並且沒有任何錯誤使用它。

直接比較日期與相應的日期可能會被認爲是「更安全」的B/C有可能你提供不兼容的字符串格式並得到錯誤的結果(例如:比較2015-10-01與2015-19-01)。

最後,要回答關於對象比較的一般問題,對於您自己的自定義對象,您需要定義合適的__hash____eq__函數。也是谷歌:Python的functools.total_ordering有關自定義更精明的比較的東西對象

https://docs.python.org/2/library/functools.html