为什么我不能在django poll教程第5部分的bug修复中使用now变量

时间:2013-11-04 21:12:02

标签: python django

我是Python和Django的新手。我正在研究民意调查教程,并决定在这里发布一个问题,更多的是Python而不是Django ...... 在Writing Your First Django App, part 5中, - > Writing our first test,他们提出了一个错误,然后创建了一个测试来揭露错误,运行测试将导致测试失败。

修复如下 - >修改下面models.py中指出的方法 - >测试将返回true

def was_published_recently(self):
     now = timezone.now()
     return now - datetime.timedelta(days=1) <= self.pub_date <  now

我的问题是,当我在下面键入而不替换变量now时,测试将fail。这是为什么?这不是一个简单的替代?

def was_published_recently(self):
     return timezone.now() - datetime.timedelta(days=1) <= self.pub_date < timezone.now()

2 个答案:

答案 0 :(得分:1)

第一个函数获取当前时间,然后将该值保存在变量now中。然后在下一行中使用该值两次(未更改)。

然而第二个函数调用timezone.now两次。这意味着您将获得两次不同次;每个电话一个。当然,他们最多只会停留几毫秒,但仍然是不同的。

请记住,每次拨打timezone.now时,都会返回当前时间。因此,没有两个调用会返回相同的值。

答案 1 :(得分:1)

理解差异的最简单方法是使用一些例子:

In [4]: timezone.now() == timezone.now()
Out[4]: False

In [5]: a = timezone.now()
In [6]: a == a
Out[6]: True


In [11]: print timezone.now() - timezone.now()
-1 day, 23:59:59.999984

In [12]: print a - a
0:00:00

您应该注意每次拨打timezone.now()时,都会得到不同的时间。