装饰器的简单使用

理解

按照我的理解,其实装饰器就是把当前函数替换成装饰函数,然后再把当前函数当成参数传给装饰函数。

#定义装饰函数
def log(func):
    #*args,**kw用来传递未知参数
    def wrap(*args,**kw): #func.__name__表面打印程序名称
        print("begin:%s()" % func.__name__) #在程序运行前打印开始
        ret = func(*args,**kw)
        print("end:%s()" % func.__name__) #在程序运行结束后打印结束
        return ret #最后返回程序的运行结果
    return wrap #返回函数

@log #表示对该函数进行装饰
def test():
    print("hello world")

test() #调用被装饰过后的函数

运行结果

begin:test()
hello world
end:test()

另外一种情况

这里我将演示装饰器带参数,以及如何给被装饰的函数传参
理解起来不难,因为test上的装饰器有参数了,所以优先把参数传给装饰器的最顶层函数,其次在把test函数传给下一层函数。

#定义封装函数
def log(text):#最顶层函数
    def decorator(func):
        #*args,**kw用来传递未知参数
        def wrap(*args,**kw): #func.__name__表面打印程序名称
            print("%s begin:%s()"%(text , func.__name__)) #在程序运行前打印开始
            ret = func(*args,**kw)
            print("%s end:%s()" %(text ,func.__name__)) #在程序运行结束后打印结束
            return ret #最后返回程序的运行结果
        return wrap #返回第二层函数
    return decorator#返回第一层函数

@log("python") #表示对该函数进行装饰
def test(content):
    print(content)


test("hello world") #调用被装饰过后的函数

运行结果

python begin:test()
hello world
python end:test()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值