python装饰器

来源:互联网 发布:算日子软件 ios 编辑:程序博客网 时间:2024/06/05 15:00

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

1.闭包:

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

def genetater_power(number):    def nth_power(power):        return number*power    return nth_powerraise_two=genetater_power(2)print(raise_two(7))


2.简单装饰器:

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

def decorater(func):    def wrapper():        print("start")        func()        print("end")    return wrapper@decoraterdef 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@generaterdef 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.闭包:

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

0 0
原创粉丝点击