首页 > 其他分享 >带有参数的装饰器

带有参数的装饰器

时间:2022-09-18 20:15:01浏览次数:70  
标签:return flag num 参数 带有 装饰 decorator

2022-09-18

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

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

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

 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行,调用原来的函数。

运行结果图:

 

 

    

    

标签:return,flag,num,参数,带有,装饰,decorator
From: https://www.cnblogs.com/isDaHua/p/16705579.html

相关文章

  • 使用多个装饰器
    2022-09-18多个装饰器使用的实例:1#定义一个装饰器2defmake_p(func):3print("执行装饰器make_p")45definner():6#对已有函数增加......
  • SQL Server -- 解决存储过程传入参数作为sql语句条件值时,执行阻塞问题
    成本核算程序执行某个存储过程一直阻塞,排查发现类似以下语句阻塞:selecttbl1.product_id,sum(isnull(tbl1.qty,0)*isnull(tbl2.unit_other_cost,0))asother_cos......
  • JS 带多个参数跳转页面 获取url参数数组
    1.跳转前页面代码处理,仅罗列href跳转方法,其他如jQuery跳转等原理一直不再赘述:<ahref="newUrl.html?para=1&id=2&page=3">点击文字跳转</a> 2.跳转后页面代码处理:......
  • nodejs <a>带参数返回路由标记执行数据库操作
    今天在测试mongo数据库操作维护的时候,测试了一下直接在表内添加操作列来完成数据的删除操作,直接返回数据库ID1、mongo数据操作functiondelStudentid(id,callback){ ......
  • 获取url中指定参数的值
    importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassurl{publicstaticvoidmain(String[]args){Stringurl="https://blog.csdn.&hybr......
  • 报表进阶--参数面板添加
    有时候我们并不需要看所有的数据,比如在销量表中,我们只想看”华北“地区的数据,这个时候我们就需要一个控件能帮助我们过滤掉其他的地区数据。这里我们就要从sql开始设置......
  • 4. 新版本的生产者API 带有自定义分区和回调函数的生产者
    1.开启进程[node123]systemctlstopfirewalld[node123]zkServer.shstart[node123]kafka-server-start.sh/opt/app/kafka-0.11.0.0/config/server.properties&[......
  • dataclass装饰器
    简介根据定义dataclass时指"一个带有默认值的可变的namedtuple"简单来说,就是你定义一个很普通的类,@dataclass装饰器可以帮你生成__repr__、__init__等方法,就不用自己写......
  • 15.1sys模块15.2datatime模块15.3logging模块15.4request15.5crm实战15.6参数介绍15.7
    15.1sys模块importsysprint(sys.modules)#描述当前执行代码的位置,解释器中导入的所有模块都会被放在字典中importtimeprint(time.time())print(sys.modules['time'].tim......
  • Linux内核参数-共享内存
    在数据库配置过程中经常会遇到系统内核参数配置,而其中比较关键的有关于共享内存参数的配置首先解释几个定义共享内存共享内存,顾名思义即系统中两个或多个进程可以共同访......