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

 

@decorator这个语法相当于 执行 func = decorator(func),为func函数装饰并返回
<1> 类装饰器

Python 内存缓存
## 装饰器
#类装饰器
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)
Python 内存缓存

执行结果:

Python 内存缓存

 

<2>函数装饰器

函数装饰器还是比较多的,相对来说

Python 内存缓存
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)

@decorator这个语法相当于 执行 func = decorator(func),为func函数装饰并返回
<1> 类装饰器

Python 内存缓存
## 装饰器
#类装饰器
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)
Python 内存缓存

执行结果:

Python 内存缓存

 

<2>函数装饰器

函数装饰器还是比较多的,相对来说

Python 内存缓存
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)

相关文章: