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叠加,而装饰器是在保有原效果基础上增添新功能(装饰器的功能)
    就是房子刷漆,变漂亮了。

相关推荐
七夜zippoe7 小时前
为什么 2026 年每个 Java 团队都该懂 AI Agent
java·开发语言·人工智能
youm20037 小时前
认识Redis
redis·笔记·学习
znnnk7 小时前
【Python】GUI 开发从入门到实战(三):PyQt/PySide 进阶之路
开发语言·python·pyqt
Despacito10068 小时前
Java后端性能探查工具速查表
java·开发语言
晊晌_h8 小时前
嵌入式从0到精通——Linux C|TCP 并发服务器实现方案详解
服务器·开发语言·tcp/ip
亮工硬件8 小时前
1-11 STM32内部FLASH(数据掉电保存)
笔记·stm32·单片机·嵌入式硬件·学习
传奇开心果编程8 小时前
【Rust入门知识点学与练】第17课:闭包 Closures
开发语言·学习·rust
广州灵眸科技有限公司9 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
今夜有雨.9 小时前
C# 学习文档(零基础入门)
开发语言·学习·c#