装饰器函数精讲
Posted 妙香沫颜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器函数精讲相关的知识,希望对你有一定的参考价值。
阅读目录
举例函数
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()
以上是关于装饰器函数精讲的主要内容,如果未能解决你的问题,请参考以下文章