Python day7 装饰器基本用法

装饰器:本质就是函数,功能是为其他函数添加附加功能

原则:

1.不修改被修饰函数的源代码

2.不修改被修饰函数的调用方式

装饰器的知识储备

装饰器 = 高阶函数 + 函数调用 + 闭包

例:

原函数:

def test():
    time.sleep(3)
    print('测试完成')

test()

#测试完成

目标:

不改变原函数代码和调用方式的情况下,在结果处加上程序运行的时间。

构建装饰器:

def dec(func):
    def dec_1():
        start_time = time.time()
        res = func()
        stop_time = time.time()
        print('程序运行时间%s' %(stop_time-start_time))
        return res
    return dec_1

此时我们只需要  dec(test)  就可以得到test函数的内存地址,然后运行即可

import time

def dec(func):
    def dec_1():
        start_time = time.time()
        res = func()
        stop_time = time.time()
        print('程序运行时间%s' %(stop_time-start_time))
        return res
    return dec_1


def test():
    time.sleep(3)
    print('测试完成')


test = dec(test)
test()  #这里将dec(test)赋值给test,然后test()  是为了不改变原函数的调用方式 


#测试完成
#程序运行时间3.0002593994140625

这里我们不难发现,如果这样写的话,每一次我们使用装饰器都要加上 test = dec(test) 进行重新赋值。所以在这里我们可以使用一个简单的方法  就是 在原函数的前面加上 @dec ,它就相当于test = dec(test)。

import time

def dec(func):
    def dec_1():
        start_time = time.time()
        res = func()
        stop_time = time.time()
        print('程序运行时间%s' %(stop_time-start_time))
        return res
    return dec_1

@dec   
#test = dec(test)

def test():
    time.sleep(3)
    print('测试完成')

test()

#测试完成
#程序运行时间3.0002593994140625

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值