I think, therefore I am.

python 函数03(装饰器)

阅读目录

楔子

装饰器的形成过程

开放封闭原则

装饰器的主要功能和固定结构

带参数的装饰器

多个装饰器装饰一个函数

 

 

装饰器可以简单的概括为两句话:

装饰器的本质:一个闭包函数

装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

-------------- 装饰器的标准格式 -------------------
def timer(func): def inner(*args,**kwargs): '''执行函数之前要做的''' re = func(*args,**kwargs) '''执行函数之后要做的''' return re return inner

举个例子,我想计算一个函数的运行时间,但函数的调用方法不变. 如下: 

import time
def timer(func):
    def inner():
        start = time.time()
        func()
        print(time.time() - start)
    return inner

@timer   # 等同于 func1 = timer(func1)
def func1():
    print('in func1')


func1()   # 等同于 timer(func1)() ==> inner()

带上参数,可以写成以下格式.

import time
def timer(func):
    def inner(*args,**kwargs):
start = time.time() # 函数运行前要做的.
re = func(*args,**kwargs)
print(time.time() - start) # 函数运行后要做的 return re # 如果原函数有返回值,可以返回.
return inner @timer # 等同于 func1 = timer(func1) def func1(a,b): print('in func1') @timer # 等同于 func2 = timer(func2) def func2(a): print('in func2 and get a:%s'%(a)) return 'fun2 over' func1('aaaaaa','bbbbbb') print(func2('aaaaaa'))

  

 

posted @ 2017-11-02 21:26  躬行致远  阅读(144)  评论(0编辑  收藏  举报