Python学习之装饰器

装饰器是一个函数

装饰器具有一个功能。

装饰器像给其他函数穿外套:今天穿"日志外套",明天换"缓存外套",业务本体不动分毫。这就是"**非侵入式扩展"**的威力。

一个例子

日志记录功能的装饰器

python 复制代码
import functools
import time

def log_call(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        ts = time.strftime("%Y-%m-%d %H:%M:%S")
        print(f"[{ts}] CALL {func.__name__} args={args} kwargs={kwargs}")
        result = func(*args, **kwargs)
        print(f"[{ts}] RET  {func.__name__} -> {result}")
        return result
    return wrapper

@log_call
def add(a, b):
    return a + b

add(3,5)

Q:从数学复合函数角度,如何理解装饰器的闭包?

  • 内层函数是被包装的函数,是被调用的函数
  • 外层函数是装饰器

    程序是记忆外部(提供参数),执行内部(本质逻辑)
    其实和数学复合函数不一样。
    复合函数是有buff叠加,而装饰器是在保有原效果基础上增添新功能(装饰器的功能)
    就是房子刷漆,变漂亮了。

相关推荐
她说人狗殊途1 分钟前
Spring IoC容器加载过程 vs Bean生命周期对应关系图
java·开发语言·rpc
ThreeYear_s20 分钟前
【FPGA+DSP系列】——(3)中断学习(以定时器中断为例)
单片机·学习·fpga开发
MediaTea24 分钟前
Python 编辑器:PyCharm
开发语言·ide·python·pycharm·编辑器
小熊出擊29 分钟前
[pytest] 一文掌握 fixture 的作用域(scope)机制
python·功能测试·单元测试·自动化·pytest
Cherry Zack30 分钟前
Django 视图与路由基础:从URL映射到视图函数
后端·python·django
Leinwin39 分钟前
Codex CLI 配置 Azure OpenAI GPT-5-codex 指南
后端·python·flask
0wioiw042 分钟前
Go基础(⑦实例和依赖注入)
开发语言·golang
会跑的葫芦怪43 分钟前
Go test 命令完整指南:从基础到高级用法
开发语言·后端·golang
大飞pkz1 小时前
【设计模式】代理模式
开发语言·设计模式·c#·代理模式
之歆1 小时前
LangGraph构建多智能体
人工智能·python·llama