装饰器,装饰器多参数的使用(*arg, **kwargs),装饰器的调用顺序

一、#1.执行outer函数,并且将其下面的函数名,当作参数
  #2、将outer的返回值重新赋值给f1 = outer的返回值
  #3.新f1 = inner
  #4.func = 原f1
 1 #!/usr/bin/env python
 2 def outer(func) :
 3     def inner() :
 4         print("hello")
 5         print("hello")
 6         print("hello")
 7         r = func()
 8         print("end")
 9         print("end")
10         print("end")
11         return  r
12     return inner
13 @outer
14 def f1() :
15     print("F1")
16 #1.执行outer函数,并且将其下面的函数名,当作参数
17 #2、将outer的返回值重新赋值给f1 = outer的返回值
18 #3.新f1 = inner
19 f1()

二、装饰器多参数的使用(*arg, **kwargs)

 1 #!/usr/bin/env python
 2 def oute(func) :
 3     """
 4 
 5     :param func:
 6     :return:
 7     """
 8     def inner(*arg, **kwargs) :
 9         print("abvc")
10         r = func(*arg, **kwargs)
11         print("456")
12         return r
13     return inner
14 @oute
15 def outer(func) :
16     def inner(*arg, **kwargs) :
17         print("123")
18         r = func(*arg, **kwargs)
19         print("789")
20         return r
21     return inner
22 # @oute
23 @outer
24 
25 def f1(a1, a2) :
26     print("321")
27 def f2(a1, a2) :
28     print("dfas")
29 f1(1,2)

结果为:

abvc
456
123
321
789

 1 #!/usr/bin/env python
 2 def oute(func) :
 3     """
 4 
 5     :param func:
 6     :return:
 7     """
 8     def inner(*arg, **kwargs) :
 9         print("abvc")
10         r = func(*arg, **kwargs)
11         print("456")
12         return r
13     return inner
14 # @oute
15 def outer(func) :
16     def inner(*arg, **kwargs) :
17         print("123")
18         r = func(*arg, **kwargs)
19         print("789")
20         return r
21     return inner
22 @oute
23 @outer
24 
25 def f1(a1, a2) :
26     print("321")
27 def f2(a1, a2) :
28     print("dfas")
29 f1(1,2)

结果为:

abvc
123
321
789
456

 
原文地址:https://www.cnblogs.com/shiluoliming/p/6354257.html