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

Posted 失落的黎明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器,装饰器多参数的使用(*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

 

 

以上是关于装饰器,装饰器多参数的使用(*arg, **kwargs),装饰器的调用顺序的主要内容,如果未能解决你的问题,请参考以下文章

扩展功能上下文的方法?例如在装饰器中

Python Flask装饰器登录验证

9.27

装饰器 装饰带参数的函数和添加函数

如何在graphql中将装饰器添加到args参数

python -- 带有参数的装饰器