我在练习用python生成Fibonacci序列,并遵循How do I print a fibonacci sequence to the nth number in Python?的记忆化示例。你知道吗
然后我遇到了一个有趣的区别,使用returnone liner和not。例如,下面给出了示例代码。在第一个示例中,我们不使用return one liner,它运行得非常快,但是在第二个示例中,我们使用return one liner,它运行得非常慢。你知道吗
他们不应该是一样的吗?你知道吗
def memoize(func):
memo = dict()
def decorated(n):
if n not in memo:
memo[n] = func(n)
return memo[n]
return decorated
@memoize
def fib(n):
if n<=1:
return 1
else:
return fib(n-1) + fib(n-2)
print([ fib(i) for i in range(100,110)]) # runs very fast
def memoize(func):
memo = dict()
def decorated(n):
return func(n) if n not in memo else memo[n]
return decorated
@memoize
def fib(n):
if n<=1:
return 1
else:
return fib(n-1) + fib(n-2)
print([ fib(i) for i in range(100,110)]) # very slow
问题
他们不应该是一样的吗?
为什么一个班轮的回程比另一个班轮慢得多?
我们能用不同的词写一行吗?这样它同样快?你知道吗
这个
不等于
一行不能修改备忘录的内容。如果你想比较苹果和苹果,那么试试:
要优化单行线并保存字典值,应将单行线更改为:
除了学习memoize的工作原理之外,还应该研究使用functools lru_cache'smemoize,它是“用C编写的,比用Python复制的任何东西都要快得多。”
给meowgoesthedog、chepner和FHTMitchell的帽子小费。你知道吗
相关问题 更多 >
编程相关推荐