day26:装饰器
作者:互联网
装饰器
1.装饰器 : 为原函数去扩展新功能,用新函数去替换旧函数
2.作用 : 在不改变原代码的前提下,实现功能上的扩展
3.符号 : @(语法糖)
1.装饰器的基本用法
# 1.装饰器的基本用法 '''装饰器是基于闭包函数来实现的''' def kuozhan(func): def newfunc(): print("厕所前,蓬头垢面") func() print("厕所后,精神抖擞") return newfunc def func(): print("我是宋云杰") '''kuozhan()的返回值是newfunc,newfunc替换了func''' func = kuozhan(func) # func = newfunc '''所以调用func就是相当于在调用newfunc''' func() # newfunc()
2.@符号的使用
@符号作用:
(1) 可以自动把@符号下面的函数当成参数传递给装饰器
(2) 把新函数返回,让新函数去替换旧函数,以实现功能上的扩展(基于原函数)
# 2.@符号的使用 """ @符号作用: (1) 可以自动把@符号下面的函数当成参数传递给装饰器 (2) 把新函数返回,让新函数去替换旧函数,以实现功能上的扩展(基于原函数) """ def kuozhan(func): def newfunc(): print("厕所前,牛头马面") func() print("厕所后,黑白无常") return newfunc '''1.把func当做参数传递给装饰器kuozhan''' '''2.将新函数newfunc返回替换旧函数func,进而实现功能的扩展''' @kuozhan def func(): print("我是高雪峰") func()
3.装饰器的嵌套
# 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("我是葛龙0") func()
4.用装饰器扩展带有参数的原函数
# 4.用装饰器扩展带有参数的原函数 def kuozhan(func): def newfunc(who,where): print("厕所前,萎靡不振") func(who,where) print("厕所后,兽性大发") return newfunc @kuozhan def func(who,where): print("{}在{}解手".format(who,where)) func("孙致和","鸟窝") # func = newfunc => func("孙致和","鸟窝") <=> newfunc("孙致和","鸟窝")
标签:day26,kuozhan,func,print,装饰,def,newfunc 来源: https://www.cnblogs.com/libolun/p/13454386.html