### 装饰器(运用了闭包函数)
"""
装饰器: 为原函数扩展新功能,用新功能去替代旧功能
作用 : 在不改变原有代码的基础上,实现功能上的扩展
符号 : @(语法糖)
"""
1.装饰器的基本用法
def kuozhan(func):
def newfunc():
print("厕所前,蓬头垢面")
func()
print("厕所后,精神气爽")
return newfunc
def func():
print("我叫高富帅")
func = kuozhan(func) # func = newfunc <=> func() = newfunc()
func()
2.@符号的使用
"""
@符号作用:
(1) 可以自动把@符号下面的函数当成参数传递给装饰器
(2) 把新函数进行返回,让新函数去替换旧函数,以实现功能的扩展.
"""
def kuozhan(func):
def newfunc():
print("厕所前,蓬头垢面")
func()
print("厕所后,精神气爽")
return newfunc
@kuozhan
def func():
print("我叫高富帅")
func() # func = newfunc <=> func() = newfunc()
3.装饰器的嵌套
从下到上依次传递
def kuozhan1(func):
def newfunc():
print("厕所前,人模狗样1")
func()
print("厕所后,牛头马面2")
return newfunc
def kuozhan2(func):
def newfunc():
print("厕所前,洗洗手3")
func()
print("厕所后,簌簌口4")
return newfunc
@kuozhan2
@kuozhan1
def func():
print("我是白富美5")
func()
4.用扩展函数添加带有参数的原函数的新功能
"""扩展里面的新功能函数和原函数在参数和函数调用处的参数上,要保持一致性."""
def kuozhan(func):
def newfunc(who,where):
print("厕所前,萎靡不振")
func(who,where)
print("厕所后,兽性大发")
return newfunc
@kuozhan
def func(who,where):
print("{who}在{where}解手".format(who=who,where=where))
func(