VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 简明python教程 >
  • 带有参数的装饰器

带有参数的装饰器的实质:

  因为装饰器是不能在带有参数,所以要定义带有参数的装饰器应该换一种思路。在装饰器的外面套一个函数,使用该函数返回这个装饰器。

带有参数的装饰器的实例:

复制代码
 1 # 装饰器
 2 def return_decorator(flag):
 3     def decorator(func):
 4         def inner(a,b):
 5             if flag == "+":
 6                 print("正在努力执行加法运算")
 7             elif flag == "-":
 8                 print("正在努力执行减法运算")
 9             func(a,b)
10         return inner
11     return decorator
12 
13 @return_decorator("+")
14 # 原来的函数
15 def add_num(a,b):
16     result = a + b
17     print(result)
18 
19 @return_decorator("-")
20 def sub_num(a,b):
21     result = a - b
22     print(result)
23 
24 add_num(1,2)
25 sub_num(1,4)
复制代码

  说明:

    第2行,定义了一个外部函数,内部放置装饰器。这个外部函数是有参数的。第5-8行,在inner函数内部,进行判断,如果传入的参数“flag”为“+”,输出xx;为“-”,输出xx。

    第9行,是func(a,b)参数,如果此处写为了add_num(a,b)或者sub_num(a,b),会出现“栈内存溢出”的错误。

    第11行,返回装饰器。

    第13行,给带参数的装饰器传一个flag参数“+”。第19行,传“-”参数。

    第24-25行,调用原来的函数。

运行结果图:



出处:https://www.cnblogs.com/isDaHua/p/16705579.html


相关教程