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'))