装饰器

1,装饰器

本质:本质就是一个闭包函数。------装饰器是函数的重点内容,所以必须要掌握。

装饰器的功能:在不修改函数的情况下原函数增加功能。

2,装饰器的基本模型

 

def timer(func)
    def inner(*args,**kwargs)
        ‘’‘’‘’执行函数前要做的‘’‘’
            ret=func(*args,**kwargs)
        '''''''执行函数后要做的‘’‘’‘’‘’
            return ret
        return inner
@timer 
def func2()
    print('in func2')
       
func2()

 

 3.有一个参数的装饰器

def outer(flag):
    def timer(func):
        def inner(*args,**kwargs):
            if flag:
                print('''执行函数之前要做的''')
            re = func(*args,**kwargs)
            if flag:
                print('''执行函数之后要做的''')
            return re
        return inner
    return timer

@outer(False)
def func():
    print(111)

func()
View Code

4,有多个参数的装饰器

def wrapper1(func):
    def inner():
        print('wrapper1 ,before func')
        func()
        print('wrapper1 ,after func')
    return inner

def wrapper2(func):
    def inner():
        print('wrapper2 ,before func')
        func()
        print('wrapper2 ,after func')
    return inner

@wrapper2
@wrapper1
def f():
    print('in f')

f()
View Code

这个代码执行后的效果是,先执行wrapper1的before,再执行wrapper2的before---》wrapper2的after---》再执行wrapper1里的after。

顺序方面是有点绕。

 

posted @ 2017-07-28 19:47  forjie  阅读(101)  评论(0编辑  收藏  举报