装饰器是方便开发根据产品经理调整代码的过程
只用语言描述很难理,下面直接看样例代码
1 def outer(fun):
3 def wrapper(age):#遇见函数先放在内存
6 print ("a")
7 print ("b")
fun(age )
9 print ("最后")
4 return wrapper
2 @outer#相当回去执行outer(),并且传入的参数为foo,最终执行的是outer(foo)
def foo(age):
8 print ('a',age)
#在上面执行完之后,相当于重新定义了一个foo函数
‘’‘
foo()=def wrapper(age): print ("a") print ("b") fun(age ) print ("最后")#主要是wrapper的return
'''
5 foo("age")
这部分代码的前面是我打上的程序运行顺序,方便解释和理解
首先,如果我们现在定义一个函数foo(),print是a,后面产品经理 要求 在加一个print b,我们直接加上就行,但是如果我们不是一个函数,而是成千上百个函数,这样如果我们在一个个加是不是会瞬间爆炸,装饰器就是解决这个爆炸心情的关键
我们在foo主函数前面定义了一个outer函数,这个函数就是装饰器的关键,而且这个函数是函数套函数,函数的执行方式我们都懂的,但是怎么样使outer函数与foo函数相连呢,这个时候就用到了@outer,这个是装饰器与函数链接的关键,在这个地方@outer就等于outer(foo),通过这样的方式,遇到产品经理要求改的时候我们只要修改 outer里面的函数就行了,这就是装饰器的方便之处
在执行函数方面,def的函数是先存在内存里面,调用的时候才会执行,同时注意如果需要加参数时,参数添加的位置