装饰器
Posted gumpyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。
1.装饰器的特点:
1.函数A作为参数出现的(函数B就接收函数A作为参数)
2.要有闭包的特点
1 """ 2 装饰器的特点: 3 1.函数A作为参数出现的(函数B就接收函数A作为参数) 4 2.要有闭包的特点 5 """ 6 7 8 # 可以将函数作为参数传进另一个函数里面去 9 def funcA(): 10 print("----->test") 11 12 13 def funcB(f): 14 print(f) 15 f() 16 print("------->func") 17 18 19 funcB(funcA)
2.装饰器加入可变参数和关键字
1 import time 2 3 4 def decorate(func): 5 def wrapper(*args, **kwargs): # {"clazz":‘1904‘} 6 print("正在校验中.....") 7 time.sleep(2) 8 print("校验完毕.....") 9 # 调用原函数 10 func(*args, **kwargs) 11 12 return wrapper 13 14 15 @decorate 16 def f1(n): 17 print("----f1-----", n) 18 19 20 @decorate 21 def f2(name, age): 22 print("-----f2-----", name, age) 23 24 25 @decorate 26 def f3(students, clazz=‘1905‘): 27 print("{}班级的学生如下:".format(clazz)) 28 for stu in students: 29 print(stu) 30 31 32 33 f1(5) 34 f2("tom", 20) 35 students = ["ketty", "tony", "rose"] 36 f3(students, clazz=‘1904‘)
3.多层装饰器
如果装饰器是多层的,谁距离函数最近,就优先使用那个
1 """ 2 如果装饰器是多层的,谁距离函数最近,就优先使用那个 3 """ 4 5 6 def decorate1(func): 7 print("--------> 1 start") 8 9 def wrapper(*args, **kwargs): 10 func() 11 print("刷漆") 12 print("---------> 1 end") 13 14 return wrapper 15 16 17 def decorate2(func): 18 print("--------> 2 start") 19 20 def wrapper(*args, **kwargs): 21 func() 22 print("铺地板") 23 24 print("------------> 2 end") 25 26 return wrapper 27 28 29 @decorate2 30 @decorate1 31 def house(): 32 print("我是毛坯房") 33 34 35 house()
原理:
def定义一个函数,只是在内存中开辟空间,给出地址,并没有执行
只有调用函数的时候,才去根据地址,进入执行
以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章