Python装饰器进阶:用闭包打造智能缓存函数

简介: Python装饰器进阶:用闭包打造智能缓存函数

Python装饰器进阶:用闭包打造智能缓存函数

装饰器是Python中强大的语法糖,它允许在不修改原函数代码的情况下增强功能。今天我们来实现一个实用的缓存装饰器,用于优化重复计算场景的性能。

import functools
from datetime import datetime, timedelta

def cache_with_ttl(ttl_seconds=300):
    """带过期时间的缓存装饰器"""
    def decorator(func):
        cache = {
   }

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            # 创建缓存键
            key = str(args) + str(sorted(kwargs.items()))

            # 检查缓存是否有效
            if key in cache:
                result, timestamp = cache[key]
                if datetime.now() - timestamp < timedelta(seconds=ttl_seconds):
                    return result

            # 执行函数并缓存结果
            result = func(*args, **kwargs)
            cache[key] = (result, datetime.now())
            return result

        return wrapper
    return decorator

# 使用示例
@cache_with_ttl(ttl_seconds=60)  # 缓存60秒
def expensive_computation(x, y):
    """模拟耗时计算"""
    import time
    time.sleep(2)
    return x * y + x**2

这个装饰器的核心原理是利用闭包特性,在装饰器内部维护一个缓存字典。每次调用函数时,先检查参数是否已缓存且未过期,如果是则直接返回缓存结果,避免重复计算。

关键点解析:

  1. functools.wraps 保留原函数元信息
  2. 闭包三层结构实现参数化装饰器
  3. 字典键由函数参数唯一确定
  4. 时间戳实现TTL(生存时间)机制

适用场景:

  • 数据库查询结果缓存
  • API接口响应缓存
  • 复杂计算结果的复用
  • 减少外部服务调用频率

这种模式在Web开发、数据处理等场景中非常实用,能够显著提升程序性能。掌握装饰器的灵活运用,能让你的Python代码更加优雅高效。

装饰器的本质是函数式编程思想的体现,通过组合而非修改来扩展功能,这也是Python语言哲学的重要组成部分。

目录
相关文章
|
1月前
|
缓存 监控 开发者
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
210 115
|
3月前
|
大数据 开发者 Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
396 109
|
1月前
|
Python
Python装饰器:给你的函数穿上“外套”
Python装饰器:给你的函数穿上“外套”
241 111
|
1月前
|
缓存 监控 数据安全/隐私保护
Python装饰器:让代码优雅加倍
Python装饰器:让代码优雅加倍
200 116
|
1月前
|
设计模式 缓存 监控
Python装饰器:优雅的代码增强术
Python装饰器:优雅的代码增强术
279 111
|
1月前
|
Python
Python装饰器:给你的函数穿上“外套”
Python装饰器:给你的函数穿上“外套”
189 111
|
1月前
|
缓存 监控 大数据
PHP性能优化小贴士:让你的网站飞起来
PHP性能优化小贴士:让你的网站飞起来
190 128
|
1月前
|
PHP 数据库
PHP函数式编程:像搭积木一样写代码
PHP函数式编程:像搭积木一样写代码
186 124
|
Python
探索Python中的装饰器(Decorators)
探索Python中的装饰器(Decorators)
229 92
|
存储 资源调度 容灾
2020双11,阿里巴巴集团数万数据库系统全面上云揭秘
2020年天猫双十一成交额突破4982亿,在双十一走过12个年头之际,我们的订单创建峰值达到58.3万笔/秒,再次刷新全球在线交易系统的记录。历年双十一都是对技术人的一次大考,峰值的丝般润滑体验是大家一致的追求,而数据库可谓关键。多年双十一大促“磨练”出阿里巴巴DBA一整套技能来应对大考,比方说全链路压测、容灾预案、实时限流等,同时阿里的数据库产品能力也大幅提升,如智能化的企业级MySQL内核AliSQL,自研PolarDB引擎等,这些硬核能力是阿里巴巴集团数据库团队应对大考的底气。
10169 113
2020双11,阿里巴巴集团数万数据库系统全面上云揭秘