Python datetime.datetime.now()返回旧值
我通过匹配日期在python中查找数据存储条目。我想要的是每天挑选“今天”的条目。但由于某种原因,当我将代码上传到gae服务器时,它只工作一天,第二天仍然返回相同的值 e、 g.当我上传代码并在2014年1月7日执行时,它返回2014年1月7日的值,但第二天在2014年1月8日,它仍然返回2014年1月7日的值 如果我重新部署相同的代码并再次执行,它将转到2014年1月8日,但第二天将再次失败 在我的开发环境中,它运行良好 为什么??谢谢你的帮助Python datetime.datetime.now()返回旧值,python,google-app-engine,datetime,google-cloud-datastore,Python,Google App Engine,Datetime,Google Cloud Datastore,我通过匹配日期在python中查找数据存储条目。我想要的是每天挑选“今天”的条目。但由于某种原因,当我将代码上传到gae服务器时,它只工作一天,第二天仍然返回相同的值 e、 g.当我上传代码并在2014年1月7日执行时,它返回2014年1月7日的值,但第二天在2014年1月8日,它仍然返回2014年1月7日的值 如果我重新部署相同的代码并再次执行,它将转到2014年1月8日,但第二天将再次失败 在我的开发环境中,它运行良好 为什么??谢谢你的帮助 class ClosingValueHandle
class ClosingValueHandler(webapp2.RequestHandler):
def get(self):
sct()
(……)
它似乎只在应用程序部署时获取日期时间。将_date=datetime.datetime.now().date()从定义中移到函数体中,然后查看这是否有效
def sct(self):
from_date=datetime.datetime.now().date()
value = getValueByDate(from_date)
看看这是否会改变你的结果。这通常发生在您在函数外部设置值时,因为在应用程序重新启动之前,不会再次调用该函数 正如@blackbullet4749所提到的,正是这段代码给您带来了问题:
def sct(from_date=datetime.datetime.now().date()):
value = getValueByDate(from_date)
具体来说,每次调用函数时,您都希望此代码运行datetime.datetime.now().date()
实际情况是,datetime.datetime.now().date()
只运行一次,不是在调用函数时运行,而是在首次定义函数时运行,也就是说,在实例化函数对象时运行。在执行代码时,Python实际上运行这些代码行,并创建一个与任何其他对象一样存在的函数对象。默认参数位于指定为函数对象属性的元组中
要亲自看到这一点,请尝试以下方法:
def sct(from_date=datetime.datetime.now().date()):
value = getValueByDate(from_date)
print sct.func_defaults
无论在打印出来的元组中看到什么,都是“from_date”值,该值在代码中不断重复使用
如果希望能够以默认行为调用函数,即该函数占用当前时间,但具有覆盖选项,请改为执行以下操作:
def sct(from_date=None):
if from_date is None:
from_date = datetime.datetime.now().date()
value = getValueByDate(from_date)
有关默认参数值的更多详细信息,请参见
顺便说一句,不知道这个函数应该做什么。似乎没有返回任何内容。这里的问题是您在部署.now()并将其存储在变量中时只调用一次,然后只是重用该变量,而不是在每次添加值时调用它?…我想我在这里遗漏了一个细节,因为我是作为另一个方法的一部分调用它的。所以我编辑了我的问题。你认为呢?我认为这与“sct”的方法声明不同,它应该总是创建一个新的时间戳实例。我这样做了,明天将检查这是否有效。干杯非常感谢您的详细解释!到目前为止,将时间戳创建移到mehtod主体中解决了我的问题。我将默认值添加到方法声明中的原因是,我希望能够在其他日期调用该方法,这在目前并不必要,但将来可能会再次出现。顺便说一句,我确实删掉了这篇文章的方法,因为它很长……只是想澄清一下,如果在我的上一个示例中遵循
def sct(from_date=None)
模式,sct
将接受不同的日期作为可选参数。然后,from\u date
将不会是None
所以datetime.datetime.now().date()
将不会被调用。因此,您可以采用两种方式,将当前日期作为默认日期,并接受另一个日期作为选项。
def sct(from_date=None):
if from_date is None:
from_date = datetime.datetime.now().date()
value = getValueByDate(from_date)