我有以下代码:
def get_data():
return {"a": 1, "b":2}
def main():
lazy_dic = lambda : get_data()
a_value = lazy_dic()["a"]
b_value = lazy_dic()["b"]
我希望只计算get_data()
函数一次,并且只在第一次调用它。在调用b_value的赋值时,我不希望再次调用get_data函数,但在本例中,它被调用了两次。
有什么简单的方法来实现我想要的吗?
*编辑
我编写代码是为了显示一个简单的示例,在我的用例中,我只希望在访问字典时对其进行评估。(假设get_data从数据库获取数据)
发布于 2021-12-12 10:14:26
也许可以试试这样的东西(缓存)
from functools import cache
@cache
def get_data():
return {"a":1, "b":2}
下面是一个使用cache_info()
检查缓存状态的完整示例
from functools import cache
@cache
def get_data():
return {"a":1, "b":2}
get_data.cache_info()
# Out: CacheInfo(hits=0, misses=0, maxsize=None, currsize=0)
lazy_dic = lambda : get_data()
lazy_dic()["a"]
# Out: 1
get_data.cache_info()
# Out: CacheInfo(hits=0, misses=1, maxsize=None, currsize=1)
发布于 2021-12-12 11:11:31
好的,这是问题的解决方案。
def get_data():
print("I got called only one time")
return {"a":1,"b":2}
def main():
lazy_dix = (lambda a: a)(get_data())
output1 = lazy_dix["a"]
output2 = lazy_dix["b"]
print("output1 : ",output1,"\noutput2 : ",output2)
main()
#OUTPUT
I got called only one time
output1 : 1
output2 : 2
https://stackoverflow.com/questions/70322565
复制相似问题