我有一个看起来像这样的函数:
def getCurrentShow(hour=(localtime().tm_hour),day=datetime.datetime.now().strftime('%A')):
return Schedule.objects.get(hour=hour,day=day).show
所以我可以在有或没有时间的情况下调用它。我的问题是,当我没有参数调用它时,即:
print getCurrentShow()
当从同一个python实例运行时它总是返回相同的对象(如果我有一个python shell运行,我等待一个小时并启动一个新的shell而不退出旧的例如,我可以运行它并获得不同的shell(或webserver)之间的结果,但函数总是在同一个shell中返回相同的值一次)。
我猜python缓存不带参数调用的函数的结果?任何解决这个问题的方法,无需将我对getCurrentShow的所有调用重写为
Schedule.objects.get(hour=(localtime().tm_hour),day=datetime.datetime.now().strftime('%A')).show
感谢。
答案 0 :(得分:7)
函数参数的默认值是在解释器第一次加载函数时计算的。你想要的是以下几点:
def getCurrentShow(hour=None, day=None):
hour = hour or localtime().tm_hour
day = day or datetime.datetime.now().strftime('%A')
return Schedule.objects.get(hour=hour, day=day).show
这种方法的工作方式是or
运算符返回bool(operand) != False
的第一个操作数。例如:
>>> None or 5
5
>>> None or datetime.now()
datetime.datetime(2011, 6, 6, 11, 25, 46, 568186)
>>> 10 or datetime.now()
10
通过这种方式,您可以为参数None
设置默认值,并且它们将默认为当前时间,或者调用者可以传入自己的值,该值将覆盖默认值。