usu*_* me 4 python memoization fibonacci python-decorators
所以这个关于memoization的页面让我很好奇.我运行自己的基准测试.
%%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)
Run Code Online (Sandbox Code Playgroud)
日期:
100000 loops, best of 3: 18.3 µs per loop
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
日期:
10000 loops, best of 3: 46.8 µs per loop
Run Code Online (Sandbox Code Playgroud)
正如@kevin在评论中建议的那样,我让装饰者完全错了,所以我把它删除了.其余的仍然有效!(我希望)
捕获异常意味着堆栈跟踪可能非常昂贵:
https://docs.python.org/2/faq/design.html#how-fast-are-exceptions
在两种情况下,例外非常有效:
try ... finallytry ... except,假设没有抛出任何异常但是,当发生异常并捕获所需的堆栈跟踪时 会增加很大的开销.