51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 199|回复: 0
打印 上一主题 下一主题

[python] 装饰器的简单使用

[复制链接]
  • TA的每日心情
    慵懒
    2024-9-26 17:55
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2024-9-26 21:21:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
          装饰器是一种功能很强大的模式,通常用于在不对原函数改动时以获取运行时间、日期等,但实际应用时往往能获得许多有意思的结果。比如我们先设一个过滤器用于在某个函数运算结束时对结果进行过滤处理。
    1. def filter_shell(filterfunc):
    2.     def wrapper1(func):
    3.         @functools.wraps(func)
    4.         def wrapper2(*args,**kwargs):
    5.             res1=func(*args,**kwargs)
    6.             res2=filterfunc(res1)#filterfunc函数进行数据过滤
    7.             return res2
    8.         return wrapper2
    9.     return wrapper1
    复制代码

        然后再定义一个过滤函数。
    1. def ip_filter(info:list)->str:#print2data
    2.     for line in info:
    3.         if 'inet addr' in line:
    4.           ip=line2ip(line)
    5.           break
    6.     return ip
    复制代码
    定义一个调用函数。
    1. @filter_shell(ip_filter)
    2. def wss_get_data(netip:str,cardip:str,is_drop:str)->str:
    3.     with g_login(netip,22,'root','root') as conn:
    4.         with CardOp(conn) as t:
    5.           cfg=t.card_op(cardip,9002,['ifconfig\r'])  
    6.     return cfg
    复制代码
    通过这样的调用,可以从获取的大段信息中提取自己想要的部分内容。同时如果过滤函数不能先行确定的话,也可以用一种连续调用的方式,就像剥洋葱一样。
    1. filter_shell(ip_filter)(wss_get_data)(*args)
    复制代码
    这一样可以达到目的,但一旦出故障定位起来十分麻烦,尽量不要这样写。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 00:23 , Processed in 0.063656 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表