装饰器的各种情况。
来源:互联网 发布:共青团网络志愿者 编辑:程序博客网 时间:2024/06/10 19:28
#装饰器
'''
#第一步:基本函数
def chiji():
print('吃鸡真得劲~~')
#调用函数
chiji()
#第二步:扩展功能(不能直接修改原来的函数)
def zhuangshi(func):
print('吃鸡之前,左手摸鸡~')
func()
print('吃鸡之后,右手摇鸡~')
def chiji():
print('吃鸡真得劲~~')
chiji = zhuangshi(chiji)
print(chiji)
#第三步:实现基本装饰器功能
def zhuangshi(func):
def inner():
print('吃鸡之前左手摸鸡')
func()
print('吃鸡之后右手摇鸡')
return inner
def chiji():
print('吃鸡真得劲~')
chiji = zhuangshi(chiji)
chiji()
chiji()
#第四步:语法糖方式实现装饰器
def zhuangshi(func):
def inner():
print('吃鸡之前左手摸鸡')
func()
print('吃鸡之后右手摇鸡')
return inner
@zhuangshi
def chiji():
print('吃鸡真得劲~')
chiji()
#第五步:带有参数的函数的装饰器
def zhuangshi(func):
def inner(a,b):
print('吃鸡之前左手摸鸡')
func(a,b)
print('吃鸡之后右手摇鸡')
return inner
@zhuangshi
def chiji(a,b):
print(a + '在' + b +'吃鸡真得劲~')
chiji('文章','网吧')
#带有返回值的函数
def zhuangshi(func):
def inner():
print('吃鸡之前左手摸鸡')
var = func()
print('吃鸡之后右手摇鸡')
return var
return inner
@zhuangshi
def chiji():
print('吃鸡真得劲~')
return '落地98K~~'
result = chiji()
print(result)
#第六步:带有收集参数的函数的装饰器
def zhuangshi(func):
def inner(*args,**kwargs):
print('吃鸡之前左右摸鸡')
func(*args,**kwargs)
print('吃鸡之后右手摇鸡')
return inner
def chiji(*args,**kwargs):
print('参与吃鸡的人有',args)
print('吃鸡地点为',kwargs)
#调用函数
chiji('庞志','张帅','文章','老甘',pz = '网吧',zs = '理发店',wz = '厕所',lg = 'America')
#第七步:带有参数的装饰器
def outer(arg):
def zhuangshi(func):
def inner():
if arg == '吃鸡':
print('吃鸡之前左手摸鸡')
elif arg == '撸管':
print('撸管之前洗洗手')
func()
if arg == '吃鸡':
print('吃鸡之后右手摇鸡')
elif arg == '撸管':
print('撸管之后抖一抖')
return inner
return zhuangshi
@outer('吃鸡')
def chiji():
print('吃鸡真得劲~')
chiji()
@outer('撸管')
def luguan():
print('小撸怡情大撸伤肾')
luguan()
#第八步:使用类作为装饰器的参数
class Chi:
def before():
print('吃鸡之前左手摸鸡')
def after():
print('吃鸡之后右手摇鸡')
def outer(arg):
def zhuangshi(func):
def inner():
arg.before()
func()
arg.after()
return inner
return zhuangshi
@outer(Chi)
def chiji():
print('吃鸡真得劲~')
chiji()
chiji()
#第九步:使用类作为装饰器
#装饰器(类)
class Decor:
#初始化方法
def __init__(self,arg):
self.arg = arg
#添加call魔术方法
def __call__(self,func):
#将func参数存入对象使得其他方法可以调用
self.func = func
#返回未来的吃鸡函数
return self.inner
#声明内部函数
def inner(self):
print('吃鸡之前左手摸鸡')
self.func()
print('吃鸡之后右手摇鸡')
@Decor('啥都行')
def chiji():
print('吃鸡真得劲~')
chiji()
#第十步:为类添加装饰器
def zhuangshi(func):
#未来的chi类的结果
def inner():
print('吃鸡之前左手摸鸡')
var = func()
print('吃鸡之后右手摇鸡')
return var
return inner
@zhuangshi
class Chiji:
pass
result = Chiji()
print(result)
#第十一步:装饰器的嵌套
def zhuangshi1(func):
def inner():
print('吃鸡之前左手摸鸡')
func()
print('吃鸡之后右手摇鸡')
return inner
def zhuangshi2(func):
def inner():
print('吃鸡之前洗洗手')
func()
print('吃鸡之后抖一抖')
return inner
@zhuangshi1
@zhuangshi2
def chiji():
print('吃鸡真得劲~~')
chiji()
'''
#第一步:基本函数
def chiji():
print('吃鸡真得劲~~')
#调用函数
chiji()
#第二步:扩展功能(不能直接修改原来的函数)
def zhuangshi(func):
print('吃鸡之前,左手摸鸡~')
func()
print('吃鸡之后,右手摇鸡~')
def chiji():
print('吃鸡真得劲~~')
chiji = zhuangshi(chiji)
print(chiji)
#第三步:实现基本装饰器功能
def zhuangshi(func):
def inner():
print('吃鸡之前左手摸鸡')
func()
print('吃鸡之后右手摇鸡')
return inner
def chiji():
print('吃鸡真得劲~')
chiji = zhuangshi(chiji)
chiji()
chiji()
#第四步:语法糖方式实现装饰器
def zhuangshi(func):
def inner():
print('吃鸡之前左手摸鸡')
func()
print('吃鸡之后右手摇鸡')
return inner
@zhuangshi
def chiji():
print('吃鸡真得劲~')
chiji()
#第五步:带有参数的函数的装饰器
def zhuangshi(func):
def inner(a,b):
print('吃鸡之前左手摸鸡')
func(a,b)
print('吃鸡之后右手摇鸡')
return inner
@zhuangshi
def chiji(a,b):
print(a + '在' + b +'吃鸡真得劲~')
chiji('文章','网吧')
#带有返回值的函数
def zhuangshi(func):
def inner():
print('吃鸡之前左手摸鸡')
var = func()
print('吃鸡之后右手摇鸡')
return var
return inner
@zhuangshi
def chiji():
print('吃鸡真得劲~')
return '落地98K~~'
result = chiji()
print(result)
#第六步:带有收集参数的函数的装饰器
def zhuangshi(func):
def inner(*args,**kwargs):
print('吃鸡之前左右摸鸡')
func(*args,**kwargs)
print('吃鸡之后右手摇鸡')
return inner
def chiji(*args,**kwargs):
print('参与吃鸡的人有',args)
print('吃鸡地点为',kwargs)
#调用函数
chiji('庞志','张帅','文章','老甘',pz = '网吧',zs = '理发店',wz = '厕所',lg = 'America')
#第七步:带有参数的装饰器
def outer(arg):
def zhuangshi(func):
def inner():
if arg == '吃鸡':
print('吃鸡之前左手摸鸡')
elif arg == '撸管':
print('撸管之前洗洗手')
func()
if arg == '吃鸡':
print('吃鸡之后右手摇鸡')
elif arg == '撸管':
print('撸管之后抖一抖')
return inner
return zhuangshi
@outer('吃鸡')
def chiji():
print('吃鸡真得劲~')
chiji()
@outer('撸管')
def luguan():
print('小撸怡情大撸伤肾')
luguan()
#第八步:使用类作为装饰器的参数
class Chi:
def before():
print('吃鸡之前左手摸鸡')
def after():
print('吃鸡之后右手摇鸡')
def outer(arg):
def zhuangshi(func):
def inner():
arg.before()
func()
arg.after()
return inner
return zhuangshi
@outer(Chi)
def chiji():
print('吃鸡真得劲~')
chiji()
chiji()
#第九步:使用类作为装饰器
#装饰器(类)
class Decor:
#初始化方法
def __init__(self,arg):
self.arg = arg
#添加call魔术方法
def __call__(self,func):
#将func参数存入对象使得其他方法可以调用
self.func = func
#返回未来的吃鸡函数
return self.inner
#声明内部函数
def inner(self):
print('吃鸡之前左手摸鸡')
self.func()
print('吃鸡之后右手摇鸡')
@Decor('啥都行')
def chiji():
print('吃鸡真得劲~')
chiji()
#第十步:为类添加装饰器
def zhuangshi(func):
#未来的chi类的结果
def inner():
print('吃鸡之前左手摸鸡')
var = func()
print('吃鸡之后右手摇鸡')
return var
return inner
@zhuangshi
class Chiji:
pass
result = Chiji()
print(result)
#第十一步:装饰器的嵌套
def zhuangshi1(func):
def inner():
print('吃鸡之前左手摸鸡')
func()
print('吃鸡之后右手摇鸡')
return inner
def zhuangshi2(func):
def inner():
print('吃鸡之前洗洗手')
func()
print('吃鸡之后抖一抖')
return inner
@zhuangshi1
@zhuangshi2
def chiji():
print('吃鸡真得劲~~')
chiji()
'''
Python学习交流、资源共享群:563626388 QQ
阅读全文