python装饰器

装饰器作用类似于java中的AOP,用于处理异常日志等作用时非常好用。

1.闭包:

可以简单把闭包理解为函数中创建函数,内层函数不可以直接调用,只该内层函数的外层函数才可以调用它

def genetater_power(number):
    def nth_power(power):
        return number*power
    return nth_power


raise_two=genetater_power(2)
print(raise_two(7))


2.简单装饰器:

简单装饰器中return了wrapper,加上括号后其实就相当于执行了wrapper()

def decorater(func):
    def wrapper():
        print("start")
        func()
        print("end")
    return wrapper
@decorater
def mycode():
    print("run")




mycode()

3.修饰带参数的函数:

最外面的参数为func,wrapper括号中的参数是函数的参数。装饰器中可以取到函数的参数,并对其进行操作。

class Picture():
    def __init__(self,image_key=None,image_id=None,image_url=None):
        self.image_key=image_key
        self.image_id=image_id
        self.image_url=image_url
        
pic=Picture(123,"pic_1","www.baidu.com")#生成一个对象作为参数


def generater(func):
    def wrapper(*args,**kw):#
        func(*args,**kw)
        print(args[0].image_url)
    return wrapper


@generater
def get_pic(param):
    print(param)


get_pic(pic)

4.带参数的装饰器:

下面的装饰器用装饰器重复执行函数,执行的次数是装饰器的参数。

带参数的装饰器中,装饰器的参数在最外层,第二层的参数还是func,第三层是所要修饰的函数的参数。

def again(i):
    def decorater(func):
        def wrapper(*args,**kwargs):
            for j in range(0,i):
                func(*args,**kwargs)
        return wrapper
    return decorater


@again(3)
def do_mycode(param):
    print(param)


do_mycode(pic.image_url)








装饰器作用类似于java中的AOP,用于处理异常日志等作用时非常好用。

1.闭包:

可以简单把闭包理解为函数中创建函数,内层函数不可以直接调用,只该内层函数的外层函数才可以调用它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值