2 回答
TA贡献1839条经验 获得超15个赞
标准的 python 实现几乎没有对用户代码进行优化。
但是,您可以在纯函数上使用lru 缓存装饰器来获得您想要的功能。
from functools import lru_cache
def fib(n):
"""
Calculate the n'th fibanaci number
With O(N^2) <quadratic> runtime
"""
if n < 2: return n
return fib(n-1) + fib(n-2)
@lru_cache
def fib2(n):
"""
Calculate the n'th fibanaci number
With O(N) <linear> runtime
"""
if n < 2: return n
return fib2(n-1) + fib2(n-2)
TA贡献1788条经验 获得超4个赞
严格来说,Python 没有纯函数。随时修改函数的含义是明确的。
>>> def add(a, b): return a + b
>>> def sub(a, b): return a - b
>>> add(10, 5)
15
>>> add.__code__ = sub.__code__
>>> add(10, 5)
5
此外,可以更改函数访问的builtins,和 闭包。globals
参考实现 CPython 没有基于函数的纯度进行优化。
PyPy 的实现使用能够进行纯优化的跟踪 JIT 。请注意,这适用于低级操作(不一定是整个函数),并且仅适用于常用代码。
添加回答
举报