Python原始类型比较v / s对象比较

时间:2015-10-23 11:15:53

标签: python python-2.7 python-datetime

原始类型比较对象比较

之间的基本区别是什么?

我想比较两个日期,它可以通过原始类型轻松完成,那么我为什么要为它创建对象并比较对象呢?

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

如果原始类型工作正常那么为什么我们需要为此创建对象?

哪一个更好用?

2 个答案:

答案 0 :(得分:1)

当存在不合理格式的日期时,原始类型比较可能导致错误的结果答案。

E.g

$(".myClass").on("click", function () {
   var $this = $(this);

   if ($this.hasClass("show") {
    $this.removeClass("show");
   } else {
    $this.addClass("show");
   }
});

答案 1 :(得分:1)

您列出的格式称为isoformat

您可以通过致电dateObj.isoformat()来了解此信息。

在ISO格式(yyyy-mm-dd)中,你实际上是在比较日期的字符串等价物,这恰好会给你与字符串比较给出的相同结果......并且使用中没有任何错误那。

将日期直接与其对应方进行比较可能会被视为“更安全”b / c您可能会提供不兼容的字符串格式并得出错误的结果(例如:将2015-10-01与2015-19-01进行比较)。

最后,要回答关于对象比较的一般性问题,对于您自己的自定义对象,您需要定义正确的__hash____eq__函数。另外google:python的functools.total_ordering可以更自然地对比自定义对象

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