我有一个看起来像这样的函数:
def getCurrentShow(hour=(localtime().tm_hour),day=datetime.datetime.now().strftime('%A')):
return Schedule.objects.get(hour=hour,day=day).show
Run Code Online (Sandbox Code Playgroud)
所以我可以在有或没有时间的情况下调用它.我的问题是,当我没有参数调用它时,即:
print getCurrentShow()
Run Code Online (Sandbox Code Playgroud)
当从同一个python实例运行时它总是返回相同的对象(如果我有一个python shell运行,我等待一个小时并启动一个新的shell而不退出旧的例如,我可以运行它并获得不同的结果shell(或webserver),但该函数始终在同一个shell中返回相同的值).
我猜python缓存不带参数调用的函数的结果?任何解决这个问题的方法,无需重写我对getCurrentShow的所有调用
Schedule.objects.get(hour=(localtime().tm_hour),day=datetime.datetime.now().strftime('%A')).show
Run Code Online (Sandbox Code Playgroud)
?
谢谢.
函数参数的默认值是在解释器第一次加载函数时计算的.你想要的是以下内容:
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
Run Code Online (Sandbox Code Playgroud)
这种方式的工作方式是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
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以为参数设置默认值None,它们将默认为当前时间,或者调用者可以传入自己的值,这将覆盖默认值.
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |