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函式
- 高階函式 - Higher Order Function函式Function
- Python進階07 函式物件Python函式物件
- Python 函式進階-迭代器Python函式
- 09-Python之路---函式進階Python函式
- python進階(17)偏函式partialPython函式
- JavaScript 高階函式(Heigher-order function)JavaScript函式Function
- Masa Framework原始碼解讀-02快取模組(分散式快取進階之多級快取)Framework原始碼快取分散式
- 精讀《函式快取》函式快取
- 05-python函式進階和檔案Python函式
- 函式的進階函式
- JavaScript function 函式JavaScriptFunction函式
- python高階函式Python函式
- 記憶(快取)函式返回值:Python 實現快取函式Python
- Python技法2:函式引數的進階用法Python函式
- Spring : 快取相關注解@EnableCaching、@CacheConfig、@Cacheable、@CachingSpring快取
- 【Android進階】RecyclerView之快取(二)AndroidView快取
- ??Java開發者的Python快速進修指南:函式進階JavaPython函式
- python- 函式高階Python函式
- python常用函式進階(2)之map,filter,reduce,zipPython函式Filter
- 快取函式的簡單使用快取函式
- day 10 函式的進階函式
- 函式進階應用3函式
- pytest進階之fixture函式函式
- [swift 進階]讀書筆記-第六章:函式 C6P1函式的靈活性(The flexibility of function)Swift筆記函式FlexFunction
- 從零開始學Python:20課-函式使用進階Python函式
- Java 8 Function 函式介面JavaFunction函式
- js的函式function(一)JS函式Function
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- python高階內建函式Python函式
- 簡單的檔案快取函式快取函式
- Flask-caching 的快取與刪除 —— 避坑指南Flask快取
- 前端進階-ES6函式前端函式
- 前端進階-執行時函式前端函式
- 測開之函式進階· 第2篇《純函式》函式
- 測開之函式進階· 第4篇《匿名函式》函式