我有一个python函数,它根据传递的参数来缓存结果。问题是,fval()
可以根据其他因素返回不同的值。但是test()
仍然向我发送过时的值。如何确保参数v
从fval()
@cached(60*5)
def test(a,v=fval()):
print "inside function"
return a,v
r = test(2)
inside test function
print r
(2, 5)
print fval()
7
r = test(2) . #This time I am expecting v to be 7, but it isnt
print r
(2,5)
我希望r打印(2,7)。如何确保将最新值作为参数发送到缓存函数?
答案 0 :(得分:0)
在评估函数for all functions in Python时评估可选值。通常的解决方案是提供一个不代表任何内容的值,然后进行检查:
@cached(60*5)
def test(a, v=None):
if v is None:
v = fval()
print "inside function"
return a, v
如果在此之后,您还希望cached
对fval()
的最终值起作用而不是没有第二个参数,则需要执行以下操作:
@cached(60*5)
def _test(a, v):
print "inside function"
return a, v
def test(a, v=None):
if v is None:
v = fval()
return _test(a, v)
答案 1 :(得分:0)
是因为这一行:
def test(a,v=fval()):
在Python中,默认参数在函数定义处解析一次。
您可能需要执行以下操作:
def test(a, v=None):
if v is None:
v = fval()
# the rest here