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 。請注意,這適用于低級操作(不一定是整個函數),并且僅適用于常用代碼。
添加回答
舉報