在代码运行期间在不改变原函数定义的基础上,动态给该函数增加功能的方式, 称之为装饰器
装饰器的优点
- 抽离出大量函数中与函数功能本身无关的的雷同 代码并继续重用。
- 使用装饰器可以将函数“修饰”为完全不同的行为,可以有效的将业务逻辑正交分解,如用于将 权限与身份验证从业务中独立出来。
- 如果一个函数需要一个功能,如果这个功能可以被使用在很多函数上,或是函数并不是自己实现,那可以写个装饰器来实现这些功能。
接下来将由浅入深探索装饰器
第一步:调用两遍myfunc函数
def myfunc():
print ("myfunc() called.")
myfunc()#调用了myfunc函数
myfunc()#调用了myfunc函数
第二步:对myfunc函数进行装饰
def deco(func):#装饰函数
print ("before myfunc() called.")
func()
print (" after myfunc() called.")
return func
def myfunc():#被装饰函数
print (" myfunc() called.")
myfunc = deco(myfunc)
myfunc()
myfunc()
执行结果:
before myfunc() called.
myfunc() called.
after myfunc() called.
myfunc() called.
myfunc() called.
但期望实现的目标:
before myfunc() called.
myfunc() called.
after myfunc() called.
before myfunc() called.
myfunc() called.
after myfunc() called.
第三步:
def deco(func):
print ("before myfunc() called.")
func