码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2017-07-28 20:52:38      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:opened   style   after   多个参数   view   font   hid   str   inner   

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。

顺序方面是有点绕。

 

装饰器

标签:opened   style   after   多个参数   view   font   hid   str   inner   

原文地址:http://www.cnblogs.com/52forjie/p/7252330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!