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)

