原文地址https:nolon.xyz在学习python过程中,相信大家对装饰器的概念很模糊,我也是困惑了很久,决定写一篇文章梳理一下。首先要搞清楚什么是装饰器:简单来说,可以把装饰器理解为一个包装函数的函数,在函数运行时增加功能但不影响这个函数原有内容,还可以进行函数执行后的清理工作。举一个小例子@func1def func2(): pass装饰器做的事情就是func1(func2) 传递了一个函数对象到我们的装饰器里面然后先执行装饰器func1其中的内容,然后再执行函数func2。比如举一个普通装饰器的例子#普通装饰器def func1(func): def add_func(): print(‘这是我要添加的功能’) return func() return add_func@func1def func2(): print(‘hello world’)#func1装饰器函数#func2被装饰的函数>>>func2()这是我要添加的功能hello world在这段代码中func2()相当于func1(func2)()->add_func(),再想要执行func2()函数时,先执行装饰器func1()函数,并且参数func相当于func2()。执行func1函数时由于返回值是add_func,我们执行的是func1(func2)(),也就相当于执行add_func(),输出’这是我添加的功能’,返回一个func()函数,也就是参数func的调用,即对应的func2函数的调用。装饰器的基本框架def func1(func): def func2(): return func() return func1()进阶来一个带参数的装饰器吧def func1(func): def func2(a,b): a=1 b=2 return func(a,b) return func()@func1def func(x,y) print(’this is a add func’) print(x+y)>>>func(10,20)this is a add func3自这段代码中被装饰函数的参数传递到装饰函数的变量中,也就是x传递给了a,y传递给了b,return func(a,b)即调用了func函数并且函数的参数为a和b。再高级一点的 装饰器函数带参数 (哈哈,是不是感觉有点懵了)def arg_func(arg): def _func(func): def _func1(): if arg==‘good’: print(‘出去玩’) if arg==‘bad’: print(‘不出去玩’) return func() return _func1 return _func@arg_func(‘bad’)def func(): print(‘bad day’)@arg_func(‘good’)def func1() print(‘good day’)>>>func()不出去玩bad day>>>func1()出去玩good day这段代码其实很简单,就是装饰器多了一个参数用来判断,看上去也很好理解。同样,执行func装饰器接收函数(arg_func)的参数是bad,执行func1函数,装饰器接收函数的参数是good好了,到这里,装饰器的内容基本上就梳理完了,肯定还有不全的地方或者不好的地方,希望小伙伴们可以多多完善,有需要补充的或者需要改正的在下面留言告诉我哦 ( • • )y!文章地址: