1

我是 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

我的问题是,当我在下面键入而不替换 variablenow时,测试将fail. 这是为什么?不是简单的替换吗?

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

2 回答 2

1

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

然而,第二个函数调用timezone.now了两次。这意味着您将获得两个不同的时间;每个呼叫一个。当然,它们最多只会关闭几毫秒,但这仍然是一个区别。

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

于 2013-11-04T21:21:43.510 回答
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(),你得到不同的时间。

于 2013-11-04T21:30:42.477 回答