python標准庫中的functools模塊,提供了functools.lru_cache,基於內存的緩存。
from functools import lru_cache
@lru_cache(maxsize=1)
def sum2(a,b):
print(f"計算{a}+{b} ... ")
return a+b
print(sum2(2,3))
print(sum2(2,3))
print(sum2(4,7))
print(sum2(4,7))
print(sum2(2,3))
print(sum2(4,7))
maxsize=1,表示可以緩存的元素的個數。
改變maxsize的值為2,再切換為1,運行程序觀察輸出結果,
sum2.cache_info() #查看緩存性能
sum2.cache_clear() #清除緩存
基於磁盤的緩存
"""
教程 https://joblib.readthedocs.io/en/latest/memory.html
安裝 pip install joblib
"""
from joblib import Memory
memory = Memory(location="./cachedir")
@memory.cache
def sum2(a,b):
print(f"計算{a}+{b} ... ")
return a+b
print(sum2(2,3))
print(sum2(2,3))
print(sum2(4,7))
print(sum2(4,7))
print(sum2(2,3))
print(sum2(4,7))
————————————————
版權聲明:本文為CSDN博主「_Tsun」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sunt2018/java/article/details/97235224
python之裝飾器(類裝飾器,函數裝飾器)
@decorator這個語法相當於 執行 func = decorator(func),為func函數裝飾並返回
<1> 類裝飾器
## 裝飾器 #類裝飾器 class Decorator: def __init__(self,func): ## 賦值函數 self.func = func def __call__(self, *args, **kwargs): ## 一call頂萬物 print('假設這里開始執行其他的代碼') self.other_func() self.func(*args, **kwargs) self.other_func2() print('假設這里在執行完這個函數后,執行了其他的代碼') return def other_func(self): print('這是一個打醬油的函數') @staticmethod def other_func2(): print('這是一個吃瓜的函數') ## 測試一下 @Decorator def test_a(a,b): print(f'print a :{a}') print(f'print b :{b}') c = a+b print(c) return c test_a(1,2)
執行結果:
<2>函數裝飾器
函數裝飾器還是比較多的,相對來說
def zsq_func(func): print('這是一個函數裝飾器') def wrapper(*args,**kwargs): try: print('開始前,執行的代碼') func(*args,**kwargs) print('結束了,執行的代碼') return except: print('出錯了的處理') print('執行裝飾器函數前可以執行其他代碼') return wrapper ## 測試一下 @zsq_func def func(a,b): print(f'print a :{a}') print(f'print b :{b}') c = a+b print(c) return c func(1,2)