为什么一个记忆策略比另一个慢?

 飞翔1 发布于 2022-12-25 19:12

所以这个关于memoization的页面让我很好奇.我运行自己的基准测试.

1)可变默认字典:

%%timeit
def fibo(n, dic={}) :
    if n not in dic :
        if n in (0,1) :
            dic[n] = 1
        else :
            dic[n] = fibo(n-1)+fibo(n-2)
    return dic[ n ]
fibo(30)

日期:

100000 loops, best of 3: 18.3 µs per loop

2)相同的想法,但遵循"更容易请求宽恕而不是许可"的原则:

In [21]:

%%timeit
def fibo(n, dic={}) :
    try :
        return dic[n]
    except :
        if n in (0,1) :
            dic[n] = 1
        else :
            dic[n] = fibo(n-1)+fibo(n-2)
        return dic[ n ]
fibo(30)

日期:

10000 loops, best of 3: 46.8 µs per loop

我的问题

与1)相比,为什么2)这么慢?

编辑

正如@kevin在评论中建议的那样,我让装饰者完全错了,所以我把它删除了.其余的仍然有效!(我希望)

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有