Python 装饰器 (十八)

装饰器是一个函数,用来包装别的函数的函数,并返回一个修改之后的函数对象,将其重新赋值原来的标识符,原始函数对象是无法访问的。

当执行该方法时:先执行装饰器内部的代码然后执行返回的对象。

装饰器原理

def decorate(func):
    print "start called func()!"
    func()
    
def func_1():
    print "This is func_1()"
    
decorate(func_1)
相当于
def decorate(func):
    print "start called func()!"
    return func
@decorate
def func_2():
    print "This is func_2()" 

func_2()

装饰的函数带有参数

def decorate(func):
    def _decorate(*agrs, **kwagrs):
        print "agrs:",agrs
        print "kwagrs",kwagrs
        func(*agrs, **kwagrs)
    return _decorate
    
@decorate
def func(*agrs, **kwagres):
    print "This is func()"
    
func(1,2,3,a=4,b=5,c=6)

装饰器带参数(需要再在外面包装一层函数)

def decorate(arg):
    if arg == 0:
        print "arg == 0"
        def _decorate_0(func):
            def __decorate_1(*agrs, **kwagrs):
                print "agrs:",agrs
                print "kwagrs",kwagrs
            return __decorate_1
        return _decorate_0
    elif arg == 1:
        print "arg == 1"
        def _adecorate_1(func):
            def __decorate_1(*agrs, **kwagrs):
                print "agrs:",agrs
                print "kwagrs",kwagrs
            return __decorate_1
        return _adecorate_1

@decorate(0)
def func_1(*agrs, **kwagres):
    print "This is func_1()"
    
@decorate(1)
def func_2(*agrs, **kwagres):
    print "This is func_1()"
    
func_1(1,2,3)
func_2(a=4,b=5,c=6)

内置的装饰器有三个,分别是staticmethod、classmethod和property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。很少使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值