首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >延迟评估python数据结构

延迟评估python数据结构
EN

Stack Overflow用户
提问于 2021-12-12 10:07:00
回答 2查看 128关注 0票数 0

我有以下代码:

代码语言:javascript
运行
复制
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从数据库获取数据)

EN

回答 2

Stack Overflow用户

发布于 2021-12-12 10:14:26

也许可以试试这样的东西(缓存)

代码语言:javascript
运行
复制
from functools import cache

@cache
def get_data():
    return {"a":1, "b":2}

下面是一个使用cache_info()检查缓存状态的完整示例

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-12-12 11:11:31

好的,这是问题的解决方案。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70322565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档