您的位置:首页 > 编程语言 > Python开发

python基础(06)——装饰器

2017-12-24 18:35 127 查看
# 第一步:基本函数
def lashi():
print('这是一个基本函数')

#调用函数:
lashi()

# 第二步:扩展功能(不能直接修改原来的函数)

#定义用于扩展函数的函数
def kuozhan(var):#var接收基本函数lashi
#扩展功能1
print('这是扩展1')
#原有函数功能
var()#var调用基本函数lashi
#扩展2
print('这是扩展2')

#:基本函数
def lashi():
print('这是一个基本函数')

#调用函数
kuozhan(lashi)

#第三步:实现基本装饰器功能

#定义用于扩展函数的函数
def kuozhan(var):#var接收基本函数lashi
#inner就是扩展之后的lashi函数
def inner():
#扩展功能1
print('这是扩展1')
#原有函数功能
var()#var调用基本函数lashi
#扩展2
print('这是扩展2')
return inner

# :基本函数
def lashi():
print('这是一个基本函数')

#因为装饰函数没有函数值,lashi接收的None
lashi= kuozhan(lashi)
print(lashi)
#调用函数
lashi()

#第四步:语法糖方式实现lashi装饰器

#定义用于扩展函数的函数
def kuozhan(var):#var接收基本函数lashi
#inner就是扩展之后的lashi函数
def inner():
#扩展功能1
print('这是扩展1')
#原有函数功能
var()#var调用基本函数lashi
#扩展2
print('这是扩展2')
return inner

# :基本函数
@kuozhan##语法糖 相当于lashi = kuozhan(lashi)
def lashi():
print('这是一个基本函数')

lashi()

#第五部:带有参数de函数的装饰器

#定义用于扩展函数的函数
def kuozhan(var):#var接收基本函数lashi
#inner就是扩展之后的lashi函数
def inner(a,b):
#扩展功能1
print('这是扩展1')
#原有函数功能
var(a,b)#var调用基本函数lashi
#扩展2
print('这是扩展2')
return inner

# :基本函数
@kuozhan##语法糖 相当于lashi = kuozhan(lashi)
def lashi(a,b):
print(a,'这是一个基本函数',b)

lashi(a='***',b='%%%')

#带有返回值的函数
def kuozhan(var):#var接收基本函数lashi
#inner就是扩展之后的lashi函数
def inner(a,b):
#扩展功能1
print('这是扩展1')
#原有函数功能
res = var(a,b)#var调用基本函数lashi
#扩展2
print('这是扩展2')
return res
return inner

# :基本函数
@kuozhan##语法糖 相当于lashi = kuozhan(lashi)
def lashi(a,b):
print(a,'这是一个基本函数',b)
return '定得多练'

result = lashi(a='***',b='%%%')
print(result)

# 第六步:带有收集参数的函数的装饰器

#定义用于扩展函数的函数
def kuozhan(var):#var接收基本函数lashi
#inner就是扩展之后的lashi函数
def inner(*a,**b):
#扩展功能1
print('这是扩展1')
#原有函数功能
var(*a,**b)#var调用基本函数lashi
#扩展2
print('这是扩展2')
return inner

# :基本函数
@kuozhan##语法糖 相当于lashi = kuozhan(lashi)
def lashi(*a,**b):
print(a,'这是一个基本函数',b)

lashi('***',nn = '&&&&')

#第七步:带有参数的装饰器
def outer(arg):
# 定义用于扩展函数的函数
def kuozhan(var):  # var接收基本函数lashi
# inner就是扩展之后的lashi函数
def inner():
# 扩展功能1
if arg == 0:
print('这是扩展1')
elif arg == 1:
print('llll')
# 原有函数功能
var()  # var调用基本函数lashi
# 扩展2
if arg == 0:
print('这是扩展2')
elif arg == 1:
print('llllllll')
return inner

return kuozhan

@outer(0)
# :基本函数
def lashi():
print('这是一个基本函数')

lashi()

#第八步:使用类作为装饰器的参数
class Shi:
#装饰
def aaaa():
print('装饰')
def bbbb():
print('装饰')

def outer(arg):#接收类Shi
#定义装饰器
def kuozhan(var):#接收基本函数lashi
def inner():
#接收类的装饰aaaa
arg.aaaa()

var()#调用基本函数lashi

#接收类的装饰bbbb
arg.bbbb()

return inner
return kuozhan

@outer(Shi)
#基本函数
def lashi():
print('这是一个基本函数')

lashi()

#第九步:使用类作为装饰器

# 装饰器(类)
class Decor:
# 初始化方法
def __init__(self, arg):  # Outer
self.arg = arg

# 添加call魔术方法
def __call__(self, func):  # zhuangshi
# 将func参数存入对象使得其他方法可以调用
self.func = func
# 返回未来的拉屎函数
return self.inner

# 声明内部函数
def inner(self):  # inner
# 扩展功能1
print('拉屎之前,沐浴更衣')
# 拉屎函数
self.func()
# 扩展功能2
print('拉屎之后,焚香祭祖')

@Decor('aa')  # 相当于 @对象  -》@装饰器
def lashi():
print('辣妹子拉,拉妹子辣~~')

lashi()

#第十步:为类添加装饰器

#装饰器
def kuozhan(cls):#接收类
#未来的HUman类的结果
def inner():
#扩展功能
print('装饰')
#inner的结果也是对象
var = cls()
#扩展功能
print('装饰')

#返回被装饰的内容的结果
return var

#返回未来的函数(inner)
return inner

@kuozhan
class Human:
pass

#实例化对象
result = Human()#类的调用结果为对象
print(result)

#第十一步:装饰器的嵌套

#装饰器1

def zhuangshi2(func):
#定义内部函数
def inner():
#扩展功能1
print('壮汉死')
#调用函数
func()
#扩展功能2
print('壮汉死')

#返回内部函数
return inner

#装饰器2
def zhuangshi1(func):
#定义内部函数
def inner():
#扩展功能
print('装饰')
#调用函数
func()
#扩展功能
print('装饰')

#返回inner
return inner

@zhuangshi2
@zhuangshi1
def lashi():
print('这是基本函数')

lashi()

Python学习交流、资源共享群:563626388 QQ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: