Python進階 函式快取 (Function caching)
函式快取允許我們將一個函式對於給定引數的返回值快取起來。
當一個I/O密集的函式被頻繁使用相同的引數呼叫的時候,函式快取可以節約時間。
在Python 3.2版本以前我們只有寫一個自定義的實現。在Python 3.2以後版本,有個lru_cache的裝飾器,允許我們將一個函式的返回值快速地快取或取消快取。
Python 3.2及以後版本
我們來實現一個斐波那契計算器,並使用lru_cache。
from functools import lru_cache
@lru_cache(maxsize=32)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
>>> print([fib(n) for n in range(10)])
# Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
# 我們也可以輕鬆地對返回值清空快取,通過這樣:
fib.cache_clear()
那個maxsize引數是告訴lru_cache,最多快取最近多少個返回值。
Python 2系列版本
你可以建立任意種類的快取機制,有若干種方式來達到相同的效果,這完全取決於你的需要。
這裡是一個一般的快取:
from functools import wraps
def memorize(function):
memo = {}
@wraps(function)
def wrapper(*args):
if args in memo:
return memo[args]
else:
rv = function(*args)
memo[args] = rv
return rv
return wrapper
@memorize
def fibonacci(n):
if n < 2: return n
return fibonacci(n - 1) + fibonacci(n - 2)
fibonacci(25)
相關文章
- Python 函式進階-高階函式Python函式
- Python 函式進階-遞迴函式Python函式遞迴
- Python函式的進階Python函式
- Python進階07 函式物件Python函式物件
- Python 函式進階-迭代器Python函式
- JS 利用高階函式實現函式快取(備忘模式)JS函式快取模式
- Masa Framework原始碼解讀-02快取模組(分散式快取進階之多級快取)Framework原始碼快取分散式
- 09-Python之路---函式進階Python函式
- python進階(17)偏函式partialPython函式
- 高階函式 - Higher Order Function函式Function
- Hadoop MapReduce進階 使用分散式快取進行replicated joinHadoop分散式快取
- Python Django進階教程(六)(快取機制,CSRF)PythonDjango快取
- 函式(FUNCTION)函式Function
- 精讀《函式快取》函式快取
- 函式的進階函式
- JavaScript 高階函式(Heigher-order function)JavaScript函式Function
- ??Java開發者的Python快速進修指南:函式進階JavaPython函式
- Python 快速教程(進階篇07):函式物件Python函式物件
- 05-python函式進階和檔案Python函式
- JavaScript進階之函式JavaScript函式
- JavaScript function 函式JavaScriptFunction函式
- 記憶(快取)函式返回值:Python 實現快取函式Python
- Python技法2:函式引數的進階用法Python函式
- python高階函式Python函式
- Python 高階函式Python函式
- 【Android進階】RecyclerView之快取(二)AndroidView快取
- 快取函式的簡單使用快取函式
- day 10 函式的進階函式
- 第4天,函式進階函式
- 函式進階應用3函式
- oracle function函式castOracleFunction函式AST
- JS:1.3,函式(function)JS函式Function
- python常用函式進階(2)之map,filter,reduce,zipPython函式Filter
- python- 函式高階Python函式
- python高階之函式Python函式
- redis進階之快取管理(1課時)Redis快取
- 簡單的檔案快取函式快取函式
- pytest進階之fixture函式函式