今天学了装饰器,和大家分享一下吧~
1. 装饰器是什么、有什么用?
简单点说,就是装饰函数的。打个比方吧,给一个圣诞树装扮一些挂件,首先需要一颗树(相当于需要被装饰函数),树上可以有任意个你想要添加的挂件(装饰器),那么这颗树原有的内容不会改变,并且会增加额外的一些功能,这就是装饰器了。
2. 装饰器的基本格式:
def set_fun(func):
def call_fun(*args, **kwargs):
...
return func(*args, **kwargs)
return call_fun
@set_fun
def test(*args, **kwargs):
pass
print( test(...) )
3. 装饰器小结:
1)装饰前,func指向test函数;
2)装饰后,test指向了内部函数call_fun;
4. 装饰器简单实例1:<一个装饰器装饰多个函数>
def set_fun(func): def call_fun(): print('权威装饰') func() return call_fun @set_fun def test1(): print('test1') @set_fun def test2(): print('test2')
test1() test2()
输出结果:
5. 实例2:<多个装饰器装饰一个函数+验证>
def set_fun1(func1): print('set_fun1') def call_fun1(): print('权威装饰1', func1, '-->test装饰前地址') func1() print('-' * 5, call_fun1) return call_fun1 def set_fun2(func2): print('set_fun2') def call_fun2(): print('权威装饰2', func2) func2() print('-' * 5, call_fun2, '-->test装饰后地址') return call_fun2 @set_fun2 @set_fun1 def test(): print('test')