我有一个函数执行昂贵的操作并且经常被调用;但是,该操作只需要执行一次 - 它的结果可以被缓存。
我尝试制作一个无限生成器,但没有得到预期的结果:
>>> def g():
... result = "foo"
... while True:
... yield result
...
>>> g()
<generator object g at 0x1093db230> # why didn't it give me "foo"?
为什么 g
不是生成器?
>>> g
<function g at 0x1093de488>
编辑:如果这种方法不起作用也没关系,但我需要执行与常规函数完全一样的东西,如下所示:
>>> [g() for x in range(3)]
["foo", "foo", "foo"]
最佳答案
g()
是一个生成器函数。调用它返回生成器。然后您需要使用该生成器来获取您的值。例如,通过循环或调用 next()
在上面:
gen = g()
value = next(gen)
请注意,再次调用 g()
将再次计算相同的值并生成一个新生成器。
您可能只想使用全局缓存值。将其作为属性存储在 函数上:
def g():
if not hasattr(g, '_cache'):
g._cache = 'foo'
return g._cache
关于python - 计算一次,缓存结果,并从缓存中无限返回的函数(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977645/