python学习总结12 - 实战使用装饰器

1、什么是装饰器?

装饰器本身是一个函数,用来拓展其他函数的功能,

2、装饰器优势:

好处就是在不用更改原函数的代码前提下给函数增加新的功能。

3、加了装饰器的函数:

本身运行的是装饰器这个函数,被装饰的函数只是其中一部分

4、需求

要求:在不修改 index() 函数的源代码的前提下,为其添加统计运行时间的功能,有的业务功能比较复杂不能轻易修改核心代码。

5、代码实例

def index(x, y):
    time.sleep(3)
    print('index %s %s' % (x, y))


index(111, 222)
# index(y=111,x=222)
# index(111,y=222)
  1. 有参数的装饰器:*args,**kwargs满足各种参数
  2. 无参数的装饰器
import time


# (1) 有参数的装饰器:*args,**kwargs满足各种参数
def timmer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        stop = time.time()
        print("运行时间为:", stop - start)
        return res

    return wrapper

@timmer
def index(x, y, z):
    time.sleep(3)
    print(f"{x,y,z}")
    print("一、把 index 函数放到装饰器里面,添加了计算时间的功能")


@timmer
def home(name):
    time.sleep(2)
    print("二、把 home 函数放到装饰器里面,添加了计算时间的功能")


# (2) 无参数的装饰器模板
def auth(func):
    def wrapper(*args, **kwargs):
        # 1、调用原函数
        # 2、为其增加新功能
        name = input('your name>>: ').strip()
        pwd = input('your password>>: ').strip()
        if name == 'egon' and pwd == '123':
            res = func(*args, **kwargs)
            return res
        else:
            print('账号密码错误')

    return wrapper


@auth
def index1():
    print('成功执行了index函数')


@timmer
@auth  # 多个装饰器的时候,先执行最下面,再执行最上面的
def index2():
    print('成功执行了index函数')


if __name__ == '__main__':
    index(x=1, y=2, z=3)
    home('egon')
    index1()
    index2()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值