ufoofuufoofu 发表于 2024-9-26 21:21:16

装饰器的简单使用

      装饰器是一种功能很强大的模式,通常用于在不对原函数改动时以获取运行时间、日期等,但实际应用时往往能获得许多有意思的结果。比如我们先设一个过滤器用于在某个函数运算结束时对结果进行过滤处理。def filter_shell(filterfunc):
    def wrapper1(func):
      @functools.wraps(func)
      def wrapper2(*args,**kwargs):
            res1=func(*args,**kwargs)
            res2=filterfunc(res1)#filterfunc函数进行数据过滤
            return res2
      return wrapper2
    return wrapper1
    然后再定义一个过滤函数。def ip_filter(info:list)->str:#print2data
    for line in info:
      if 'inet addr' in line:
          ip=line2ip(line)
          break
    return ip定义一个调用函数。
@filter_shell(ip_filter)
def wss_get_data(netip:str,cardip:str,is_drop:str)->str:
    with g_login(netip,22,'root','root') as conn:
      with CardOp(conn) as t:
          cfg=t.card_op(cardip,9002,['ifconfig\r'])
    return cfg
通过这样的调用,可以从获取的大段信息中提取自己想要的部分内容。同时如果过滤函数不能先行确定的话,也可以用一种连续调用的方式,就像剥洋葱一样。
filter_shell(ip_filter)(wss_get_data)(*args)这一样可以达到目的,但一旦出故障定位起来十分麻烦,尽量不要这样写。

页: [1]
查看完整版本: 装饰器的简单使用