一 为何要用装饰器

#开放封闭原则:对修改封闭,对扩展开放

二 什么是装饰器

装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式
装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能



def outer(func):
def inner():
print("我是装饰之后的")
func()
print('4444')
return r


@outer
def f1():
print("我是老函数")
return True

f1()


传参之后的装饰器


def outer(func):
def inner(*arg,**kwargs):
print('我是新人')
ret = func(*arg,**kwargs)
print('lalala')
return ret


return inner

@outer
def index(*args,**kwargs):
print('我是原函数')
return index


index(1,2)


















多个装饰器同一个函数,并且含有参数

def outer_0(func):
def inner(*args,**kwargs):
print('3.5')
r = func(*args,**kwargs)
return r

return inner

def outer(func):
def inner(*args,**kwargs):
print('123')
r = func(*args,**kwargs)
print('456')
return r
return inner
@outer_0
@outer
def f1(a1,a2):
print('f1')
return "fff"

f1(1,2)
流程如下

 






posted on 2018-05-17 11:32  Andy_ouyang  阅读(119)  评论(0编辑  收藏  举报