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

相关推荐
小糖学代码8 分钟前
LLM系列:1.python入门:2.数值型对象
人工智能·python·ai
猫猫的小茶馆11 分钟前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
蓑衣夜行16 分钟前
Qt QWebEngine 开启硬件加速注意事项
开发语言·c++·qt·web·qwebengine
CoderYanger17 分钟前
动态规划算法-简单多状态dp问题:15.买卖股票的最佳时机含冷冻期
开发语言·算法·leetcode·动态规划·1024程序员节
零日失眠者30 分钟前
这5个Python库一旦掌握就离不开
后端·python
韩曙亮36 分钟前
【Web APIs】JavaScript 执行机制 ( 单线程特点 | 同步任务与异步任务 | 同步先行、异步排队 | 事件循环机制 )
开发语言·前端·javascript·异步任务·同步任务·web apis·js 引擎
用户83562907805136 分钟前
如何使用 Python 从 Word 文档中批量提取表格数据
后端·python
Slaughter信仰44 分钟前
图解大模型_生成式AI原理与实战学习笔记(前三章综合问答)
人工智能·笔记·学习
洲星河ZXH1 小时前
Java,比较器
java·开发语言·算法
Jerryhut1 小时前
sklearn函数总结四——归一化和标准化
人工智能·python·机器学习·jupyter·sklearn