一段非常簡單**
普通呼叫方式
def console1(a, b):
print("進入函式")
return (a, b)
print(console1(3, 'a'))
print(console1(2, 'b'))
print(console1(3.0, 'a'))
很簡單的一段**,傳入兩個引數。然後列印輸出。輸出結果
進入函式
(3, 'a')
進入函式
(2, 'b')
進入函式
(3.0, 'a')
使用某個裝飾器後
接下來我們引入functools模組的lru_cache,python3自帶模組。
from functools import lru_cache
@lru_cache()
def console2(a, b):
print("進入函式")
return (a, b)
print(console2(3, 'a'))
print(console2(2, 'b'))
print(console2(3.0, 'a'))
ほら、驚喜來了。
進入函式
(3, 'a')
進入函式
(2, 'b')
(3, 'a')
我們發現,少了一次進入函式的列印,這是怎麼回事呢?這就是接下來要說的lru快取技術了。
我們理解下什麼是lru
lru (least recently used) 是快取置換策略中的一種常用的演算法。當快取佇列已滿時,新的元素加入佇列時,需要從現有佇列中移除乙個元素,lru 策略就是將最近最少被訪問的元素移除,從而騰出空間給新的元素。
python中的實現
python3中的functools模組的lru_cache實現了這個功能,lru_cache裝飾器會記錄以往函式執行的結果,實現了備忘(memoization)功能,避免引數重複時反覆呼叫,達到提高效能的作用,在遞迴函式中作用特別明顯。這是一項優化技術,它把耗時的函式的結果儲存起來,避免傳入相同的引數時重複計算。
帶引數的lru_cache
使用方法lru_cache(maxsize=128, typed=false)maxsize可以快取最多個此函式的呼叫結果,從而提高程式執行的效率,特別適合於耗時的函式。引數maxsize為最多快取的次數,如果為none,則無限制,設定為2的n次冪時,效能最佳;如果 typed=true,則不同引數型別的呼叫將分別快取,例如 f(3) 和 f(3.0),預設false來一段綜合**:
from functools import lru_cache
def console1(a, b):
print("進入函式")
return (a, b)
@lru_cache()
def console2(a, b):
print("進入函式")
return (a, b)
@lru_cache(maxsize=256, tyxmidxkcgped=true)
def console3(a, b):
''':param a:
:param b:
:return:
'''print("進入函式")
retuwww.cppcns.comrn (a, b)
print(console1(3, 'a'))
print(cons程式設計客棧ole1(2, 'b'))
print(console1(3.0, 'a'))
print("*" * 40)
print(console2(3, 'a'))
print(console2(2, 'b'))
print(console2(3.0, 'a'))
print("*" * 40)
print(console3(3, 'a'))
print(console3(2, 'b'))
print(console3(3.0, 'a'))
同樣的可以用到爬蟲的去重操作上,避免網頁的重複請求。在後期儲存的時候做判斷即可。
from functools import lru_cache
from requests_html import htmlsession
session=htmlsession()
@lru_cache()
def get_html(url):
req=session.get(url)
print(url)
return req
urllist=["","",""]
if __name__ == '__main__':
for i in urllist:
print(get_html(i))
輸出本文標題: python快取技術實現過程詳解
本文位址: /jiaoben/python/276089.html
Python快取技術
普通呼叫方式 def console1 a,b print 進入函式 return a,b print console1 3,a print console1 2,b print console1 3.0,a 複製 很簡單的一段 傳入兩個引數。然後列印輸出。輸出結果 進入函式 3,a 進入函式 2,...
python實現快取 Python實現快取
注意 本文是乙個存根。稍會將發布有關不同的簡單快取實現的更詳細分析。請參閱下面的註解獲得大致的摘要。簡單快取實現 用法 注意,該實現使用普通列表來跟蹤訪問順序,以便能夠在快取填滿時丟棄最近最少使用的專案。列表型別沒有真正為此目的而優化,但是這種方法對於較小的快取非常有效,特別是當快取訪問遵循80 2...
python實現快取 Python實現快取
注意 本文是乙個存根。稍會將發布有關不同的簡單快取實現的更詳細分析。請參閱下面的註解獲得大致的摘要。簡單快取實現 用法 注意,該實現使用普通列表來跟蹤訪問順序,以便能夠在快取填滿時丟棄最近最少使用的專案。列表型別沒有真正為此目的而優化,但是這種方法對於較小的快取非常有效,特別是當快取訪問遵循80 2...