2 回答

TA貢獻1839條經(jīng)驗 獲得超15個贊
標準的 python 實現(xiàn)幾乎沒有對用戶代碼進行優(yōu)化。
但是,您可以在純函數(shù)上使用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條經(jīng)驗 獲得超4個贊
嚴格來說,Python 沒有純函數(shù)。隨時修改函數(shù)的含義是明確的。
>>> 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
此外,可以更改函數(shù)訪問的builtins,和 閉包。globals
參考實現(xiàn) CPython 沒有基于函數(shù)的純度進行優(yōu)化。
PyPy 的實現(xiàn)使用能夠進行純優(yōu)化的跟蹤 JIT 。請注意,這適用于低級操作(不一定是整個函數(shù)),并且僅適用于常用代碼。
添加回答
舉報