python 装饰器

'''
装饰器:装饰器本身是一个函数,目的增加一些其他函数的额外功能
       装饰其他函数
原则:
1.不会修改被装饰的函数源代码
2.不会修改装饰函数的调用方式,被装饰的函数使用方式不变 (我把你变成的女的但是你不知道)

实现装饰器:
1.变量是函数
2.高阶函数
    把 函数名 当作实参
    返回值中包含 函数名
3.嵌套函数(不是函数内点用其他函数,而是函数内在定义一个新的局部函数)

高阶函数+嵌套韩式=装饰器
'''
import time

def timmer(func):
    def warpper(*args,**kwargs):#被装饰函数可能有各种各样的参数
        start_time=time.time()
        func(*args,**kwargs)
        stop_time=time.time()
        print("the run time is %s" %(stop_time-start_time))
    return warpper


@timmer
def test1():
    time.sleep(3)
    print("finish test1")

def test2(func):
    def deco():#不传参
        start_time=time.time()
        func()
        stop_time=time.time()
        print("the %s run time is %s" %(func,stop_time-start_time))
    return deco

def test3(func):
    def deco(name):#传参
        print("装饰器的功能test3")
        func(name)
    return deco

@test2#自定义装饰器
def bar():
    print("in the bar ")

@test3
def foo(name):#当要传参数时,装饰器也要输入参数
    print("in the foo",name)


if __name__ == '__main__':
    test1()#装饰器的使用方式

    print("慢慢的变成装饰器:第一个")
    test2(bar)#没改变源代码但是变了bar的调用方式,原来是bar()

    print("慢慢的变成装饰器:第二个")
    # print(test3(bar))
    # bar=test3(bar)
    # bar()

    bar()
    foo("lichen")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值