如何理解Python装饰器?

本文深入探讨Python装饰器,解释其作为函数的函数特性,用于增强原有函数功能的优势。装饰器常用于日志记录、性能测试、类型检查等场景,通过减少重复代码提高代码效率。案例展示了如何使用装饰器统计函数运行时间,对比了使用和不使用装饰器的情况,凸显其简洁性和实用性。
摘要由CSDN通过智能技术生成

一、什么是Python装饰器?

从字面意思就可以理解,它是用来"装饰"Python的工具,使得代码更具有Python简洁的风格。换句话说,它是一种函数的函数,因为装饰器传入的参数就是一个函数,然后通过实现各种功能来对这个函数的功能进行增强。

二、为什么用装饰器?

装饰器是通过某种函数来增强函数的功能。当然,我们可以通过很多种方式来增强函数的功能,只是装饰器有一个无法替代的优势——简洁

三、在什么时候会用到装饰器?

装饰器最大的优势是用于解决重复性的操作,其主要使用的场景有如下几个:

  • 插入日志
  • 计算函数运行时间
  • 类型检查
  • 事务处理

四、案例

如果你要对多个函数进行统计运行时间,不使用装饰器会是这样的

from time import time, sleep

def fun_one():
    start = time()
    sleep(1)
    end = time()
    cost_time = end - start
    print("func one run time {}".format(cost_time))

def fun_two():
    start = time()
    sleep(1)
    end = time()
    cost_time = end - start
    print("func two run time {}".format(cost_time))

def fun_three():
    start = time()
    sleep(1)
    end = time()
    cost_time = end - start
    print("func three run time {}".format(cost_time))

在每个函数里都需要获取开始时间start、结束时间end、计算耗费时间cost_time、加上一个q-9-a输出语句。

使用装饰器的方法后是这个样子的:

from time import time, sleep

def run_time(func):
    def wrapper():
        start = time()
        func()  
        end = time()
        cost_time = end - start
        print("func three run time {}".format(cost_time))

    return wrapper

@run_time
def fun_one():
    sleep(1)

@run_time
def fun_two():
    sleep(1)

@run_time
def fun_three():
    sleep(1)

通过编写一个统计时间的装饰器run_time,函数的作为装饰器的参数,然后返回一个统计时间的函数wrapper,这就是装饰器的写法,用专业属于来说这叫闭包,简单来说就是函数内嵌套函数。然后再每个函数上面加上@run_time来调用这个装饰器对不同的函数进行统计时间。

可见,统计时间这4行代码是重复的,一个函数需要4行,如果100个函数就需要400行,而使用装饰器,只需要几行代码实现一个装饰器,然后每个函数前面加一句命令即可,如果是100个函数,能少300行左右的代码量,可见,Python装饰器的用途还是非常广泛的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值