Python基础--装饰器

使用场景:
 eg:要求调用每个方法前都要打印该函数的名称

普通方式,每个方法里面都得写一遍,显得low

def test1():
    print "function name=>>>", test1.__name__
    pass

def test2():
    print "function name=>>>", test2.__name__
    pass

使用装饰器:

def myfun(fn):
    def warpper():
        print "function name=>>>", fn.__name__
        return fn()
    return warpper

@myfun
def test3():
    print "cz9025"


这是最简单的装饰器,但是有一个问题,如果被装饰的函数需要传入参数,那么这个装饰器就坏了。因为返回的函数并不能接受参数,你可以指定装饰器函数wrapper接受和原函数一样的参数,还好Python提供了可变参数*args和关键字参数**kwargs,有了这两个参数,装饰器就可以用于任意目标函数了。比如:
def myfun(fn):
    def warpper(*args,**kwargs):
        print "function name=>>>", fn.__name__
        return fn(*args,**kwargs)
    return warpper


高级一点的,带参数的装饰器
def logging(level):
    def myfun(fn):
        def warpper(*args,**kwargs):
            print "[{}],function name=>>>{}".format(level,fn.__name__)
            return fn(*args,**kwargs)
        return warpper
    return myfun

@logging('info')
def test3():
    print "hello"

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

参考文章:https://www.cnblogs.com/cicaday/p/python-decorator.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值