当前位置: 首页 > news >正文

Python装饰器通用样式

装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。-----该段内容摘自知乎

我们可以定义一个通用的装饰器,当需要使用装饰器时,可以直接套用这个样式。

下面是一个通用的装饰器样式:

def Decoroator(befor_func,after_func):
    def outer(main_func):
        def wrapper(*args,**kwargs):
            #主函数之前执行的函数
            befor_result = befor_func(*args,**kwargs)
            if befor_result != None:
                return  befor_result

            #主函数
            main_result = main_func(*args,**kwargs)
            if main_result != None:
                return main_result

            #主函数之后执行的函数
            after_result = after_func(*args,**kwargs)
            if after_result != None:
                return after_result
        return wrapper
    return outer

#主函数之前执行的函数
def befor_func(*args,**kwargs):
    pass
#主函数之后执行的函数
def after_func(*args,**kwargs):
    pass

@Decoroator(befor_func,after_func)
def test(*args,**kwargs):   #主函数
    pass

 

转载于:https://www.cnblogs.com/MacoLee/p/5600255.html

相关文章:

  • Y-C
  • 数组类型
  • 详解折半插入排序算法
  • drds 广播表的创建以及使用
  • 怎么布局宽度自适应的正方形
  • nginx按天切割日志
  • awk用法
  • EF批量插入 扩展
  • 如何编写跨平台的Java代码
  • java Web jsp四大作用域和九大内置对象
  • Oracle(21)—— JDBC连接数据库的各种方式
  • hashCode的作用
  • mysql innodb_double_write特性
  • JSON.parse()和JSON.stringify()
  • 数据结构之概念初涉(1)
  • 「译」Node.js Streams 基础
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • iOS编译提示和导航提示
  • Java 内存分配及垃圾回收机制初探
  • Java方法详解
  • MySQL QA
  • Node项目之评分系统(二)- 数据库设计
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 数组大概知多少
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (3)nginx 配置(nginx.conf)
  • (八)Spring源码解析:Spring MVC
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)hibernate配置管理
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (转载)利用webkit抓取动态网页和链接
  • ***检测工具之RKHunter AIDE
  • .Mobi域名介绍
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net 知识杂记
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ACTF2020 新生赛]Upload 1
  • [autojs]autojs开关按钮的简单使用
  • [bzoj1324]Exca王者之剑_最小割
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [Django开源学习 1]django-vue-admin
  • [hdu 3652] B-number
  • [JavaEE]线程的状态与安全
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历
  • [LeetCode周赛复盘] 第 310 场周赛20220911
  • [Linux_IMX6ULL应用开发]-Makefile
  • [NOIP2005]过河