day 12 带参数的装饰器

 

函数的有用信息

 1 from functools import wraps
 2 def wrapper(f):
 3     def innner(*args,**kwargs):
 4         '''执行函数前的的相关操作'''
 5         ret = f(*args,**kwargs)
 6         '''执行函数后的相关操作'''
 7         return ret 
 8     return inner              
 9 
10 
11 def func1():
12     '''
13     此函数是完成登录的功能,参数分别是...作用。
14     :return:返回值是登录成功与否(True,False)
15     '''
16     print(666)
17     print(func1._name_)
18     print(func1._doc_)
19     return True
20 
21 
22 func1()
23 print(func1._name_)
24 print(func1._doc_)
View Code

带参数的装饰器

可以通过装饰器带参数达到想要的传参

 1 import time
 2 def timmer(*args,**kwargs):
 3     def wrapper(f):
 4         def inner(*args,**kwargs):
 5             if flag:
 6                 start_time = time.time()
 7                 ret = f(*args,**kwargs)
 8                 time.sleep(0.3)
 9                 end_time = time.time()
10                 print('此函数的执行效率%f' % (end_time-start_time))
11             else:
12                 ret = f(*args, **kwargs)
13             return ret
14         return inner
15     return wrapper
16 
17 flag = True
18 @timmer(flag,2,3)  # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器
19 def func1():
20     print(666)
21 
22 
23 @timmer(flag)
24 def func2():
25     print(777)
26 # func1()
27 # func2()
28 
29 # import time
30 # flag = True
31 # def wrapper(f):
32 #     def inner(*args,**kwargs):
33 #         if flag:
34 #             start_time = time.time()
35 #             ret = f(*args,**kwargs)
36 #             time.sleep(0.3)
37 #             end_time = time.time()
38 #             print('此函数的执行效率%f' % (end_time-start_time))
39 #         else:
40 #             ret = f(*args, **kwargs)
41 #         return ret
42 #     return inner
View Code 

多个装饰器装饰一个函数


当多个装饰器装饰一个函数的时候,从上至下依次执行各个装饰器被装饰函数执行前的相关操作,等依次执行到被装饰函数,之后执行被装饰函数,后从下向上依次执行每个装饰器被装饰函数执行后相关操作。

 1 def wrapper1(func):  # func ==  f函数名
 2     def inner1():
 3         print('wrapper1 ,before func')  # 2
 4         func()
 5         print('wrapper1 ,after func')  # 4
 6     return inner1
 7 
 8 def wrapper2(func):  # func == inner1
 9     def inner2():
10         print('wrapper2 ,before func')  # 1
11         func()
12         print('wrapper2 ,after func')  # 5
13     return inner2
14 # @wrapper3
15 # @wrapper2  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
16 # @wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
17 # def f():  # 3
18 #     print('in f')
19 #
20 # f()  # inner2()
21 
22 # @wrapper2
23 # @wrapper3  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
24 # @wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
25 # def f():  # 3
26 #     print('in f')
27 #
28 # f()  #
View Code

 

 

posted @ 2018-04-02 12:01  大白1#  阅读(29)  评论(0)    收藏  举报