我是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()
答案 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()
时,都会得到不同的时间。