码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2020-02-10 11:55:53      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:import   --   tty   func   print   ora   mamicode   tom   wrapper   

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定义一个函数,只是在内存中开辟空间,给出地址,并没有执行

只有调用函数的时候,才去根据地址,进入执行

装饰器

标签:import   --   tty   func   print   ora   mamicode   tom   wrapper   

原文地址:https://www.cnblogs.com/GumpYan/p/12290166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!