标签:lag nbsp one 参数 bbb strong 闭包 格式 time
阅读目录
举例函数
import time def timer(func): def inner(): start = time.time() func() print(time.time() - start) return inner @timer #==> func1 = timer(func1) def func1():
time.sleep(0.1) print(‘in func1‘) func1()
in func1 0.10062646865844727
装饰器的本质:一个闭包函数
装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展
装饰一个带参数的函数
def timer(func): def inner(a): start = time.time() func(a) print(time.time() - start) return inner @timer def func1(a): print(a) func1(1)
1 0.0
两个函数,需要传递的参数不一样
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‘))
ni shi sb 0.10007596015930176 in func1 0.0 in func2 and get a:aaaaaa 0.0 fun2 over
装饰器的固定格式:
def timer(func): def inner(*args,**kwargs): ‘‘‘执行函数之前要做的‘‘‘ re = func(*args,**kwargs) ‘‘‘执行函数之后要做的‘‘‘ return re return inner
带参数的装饰器
1 def outer(flag): 3 def timer(func): 5 def inner(*args,**kwargs): 8 if flag: print(‘‘‘执行函数之前要做的‘‘‘) 9 re = func(*args,**kwargs) 11 if flag: print(‘‘‘执行函数之后要做的‘‘‘) 12 return re 6 return inner 4 return timer 2 @outer(False) def func(): 10 print(111) 7 func()
111
多个装饰器装饰同一个函数
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()
标签:lag nbsp one 参数 bbb strong 闭包 格式 time
原文地址:http://www.cnblogs.com/liuchengdong/p/7252336.html