装饰器:
开放封闭原则
1.对扩展是开放的
我们说,任何一个程序,不可能在设计之 初就已经想好了所有的功能并且未来不做 任何更新和修改。所以我们必须允许代码 扩展、添加新功能。
2.对修改是封闭的
就像我们刚刚提到的,因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户。
装饰器完美的遵循了这个开放封闭原则。
3.带参装饰器:需要自己返回以函数作为参数的装饰器。
def outer(flag):
def timer(func):
def inner(*args,**kwargs):
if flag:
print('''执行函数之前要做的''')
re = func(*args,**kwargs)
if flag:
print('''执行函数之后要做的''')
return re
return inner
return timer
@outer(False)
def func():
print(111)
func()
4.多个装饰器装饰同一个函数:
多个装饰器是按照装饰器的顺序进行执行的.装饰器就是把函数的名字传入进去, 在执行函数之前, 进行一些提前的处理.
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()