python进阶:装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

概括的讲,装饰器的作用就是为已经存在的函数或对象添加额外的功能。如在不改动已存在的函数情况下使用装饰器算多个函数的执行时间等功能。

为什么要用装饰器的三个原因:

python 复制代码
# ------------------------- 函数定义 ------------------------- 
import functools
import time
# 定义函数装饰器
def useTime(func):
    @functools.wraps(func)
    def execFunc(*args, **kw):
        # 定义开始时间
        beginTime = time.time()
        print("函数执行前: ", beginTime)
        res = func(*args, **kw)
        # 计算耗时
        ut = time.time() - beginTime
        print("函数耗时: %s 秒" % int(ut))
        return res

    return execFunc


# 使用函数装饰器
@useTime
def test():
    time.sleep(3)
    print("test func run ok")

# ------------------------- 运行 ------------------------- 
if __name__ == '__main__':
    test()

参考链接:

Python装饰器详解-CSDN博客

【python】装饰器超详细教学,用尽毕生所学给你解释清楚,以后再也不迷茫了!_哔哩哔哩_bilibili

相关推荐
m0_493934533 小时前
Chrome 75 不支持 arrayBuffer() 方法:替代方案详解
jvm·数据库·python
qq_372906933 小时前
MySQL数据库提示表损坏怎么修复_使用REPAIR TABLE修复方案
jvm·数据库·python
Absurd5873 小时前
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
jvm·数据库·python
2301_764150563 小时前
HTML5中结合IDBKeyRange限制游标扫描的数据范围
jvm·数据库·python
Polar__Star3 小时前
mysql如何快速判断两个数据库结构差异_使用mysqldiff工具.txt
jvm·数据库·python
YJlio3 小时前
2026年4月19日60秒读懂世界:从学位扩容到人形机器人夺冠,今天最值得关注的6个信号
python·安全·ios·机器人·word·iphone·7-zip
weixin_424999363 小时前
Golang怎么写基准测试benchmark_Golang基准测试教程【完整】
jvm·数据库·python
2401_835956813 小时前
PHP函数怎样读取CPU频率实时数据_PHP监控处理器主频变化【操作】
jvm·数据库·python
Greyson13 小时前
JavaScript中类属性与原型属性的覆盖规则详解
jvm·数据库·python
justjinji3 小时前
如何限制MongoDB副本集初始同步的网络带宽_maxSyncSourceLagSecs等参数
jvm·数据库·python