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

相关推荐
程序员zgh几秒前
C语言 弱定义机制 解读
c语言·开发语言·c++
Hi_kenyon几秒前
JS中的export关键字
开发语言·javascript·vue.js
少控科技1 分钟前
QT高阶日记007
开发语言·qt
把csdn当日记本的菜鸡11 分钟前
Java设计模式简单入门
java·开发语言·设计模式
2301_8107301011 分钟前
python第一次作业
python
victory043111 分钟前
大模型后训练部分 强化学习学习路径
学习
林智勇(小学信息技术高级教师)12 分钟前
学习 Scratch 最好的方式
学习·scrapy
宵时待雨14 分钟前
数据结构(初阶)笔记归纳6:双向链表的实现
c语言·开发语言·数据结构·笔记·算法·链表
我命由我1234516 分钟前
图像格式:RGB、BGR、RGBA、BGRA
图像处理·经验分享·笔记·学习·学习方法·photoshop·设计规范
xixi092417 分钟前
selenium——浏览器基础操作(启动/访问/窗口控制)
开发语言·python