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

相关推荐
MSTcheng.6 小时前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
晓13136 小时前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言
愚者游世6 小时前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it
小镇敲码人6 小时前
探索华为CANN框架中的ACL仓库
c++·python·华为·acl·cann
KIKIiiiiiiii6 小时前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
梵刹古音6 小时前
【C语言】 指针基础与定义
c语言·开发语言·算法
ZH15455891316 小时前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
Ekehlaft6 小时前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy
rit84324996 小时前
MATLAB中Teager能量算子提取与解调信号的实现
开发语言·matlab
开源技术6 小时前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python