python 装饰器的使用示例


Posted in Python onOctober 10, 2020

无参修饰 ,无参数时不需要调用

def log1(func):
  func()
@log1
def test():
  print('test:')

有参修饰

def log2(func):
  def inner(*args, **kwargs):
    func(*args, **kwargs)
  return inner
@log2
def test(num):
  print('testlog2:',num,test.__name__)
test(20) #相当于log(test(20))

@wraps可以保证装饰器修饰的函数的name的值保持不变

不带参数的装饰器

def log3(func):
  @wraps(func)
  def inner(*args, **kwargs,):
    func(*args, **kwargs)
  return inner
@log3
def test(num):
  print('testlog3:',num,test.__name__)
test(30) #相当于log(test(30))

带参数的装饰器

def log4(level):
  def log(func):
    @wraps(func)
    def inner(*args, **kwargs,):
      if level == "warn":
        print("%s is running" % func.__name__)
      func(*args, **kwargs)
    return inner
  return log
@log4(level="warn")
def test(num):
  print('testlog4:', num, test.__name__)
test(40)

实现带参数和不带参数的装饰器自适应

def log(arg):
  if callable(arg): # 判断参入的参数是否是函数,不带参数的装饰器调用这个分支
    def log3(func):
      @wraps(func)
      def inner(*args, **kwargs, ):
        func(*args, **kwargs)
      return inner
    return log3
  else:
    def log4(func):
      @wraps(func)
      def inner(*args, **kwargs,):
        if arg == "warn":
          print("%s is running" % func.__name__)
        func(*args, **kwargs)
      return inner
    return log4
@log(arg=None)
def test(num):
  print('testlog:', num, test.__name__)
test(0)

返回入参出参

def log5(func):
  def inner(*args, **kwargs):
    print('入参:',func.__name__, args, kwargs)
    res =func(*args, **kwargs)
    print('出参:',func.__name__, res)
    return res
  return inner
@log5
def test(num):
  print('testlog5:', num, test.__name__)
  return num
print(test(50))

类装饰器

class Loging:
  def __init__(self,level):
    self.level = level

  def __call__(self,func):
    @wraps(func)
    def inner(*args, **kwargs):
      if self.level == "warn":
        self.notify(func)
      func(*args, **kwargs)
    return inner

  def notify(self,func):
    print ("%s is running" % func.__name__)


@Loging(level="warn")
def test(num):
  print('testLoging:', num, test.__name__)
test(0)

以上就是python 装饰器的使用示例的详细内容,更多关于python 装饰器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python logging类库使用例子
Nov 22 Python
python使用calendar输出指定年份全年日历的方法
Apr 04 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
进一步探究Python中的正则表达式
Apr 28 Python
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
python文件的md5加密方法
Apr 06 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
pytorch之添加BN的实现
Jan 06 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
python单元测试之pytest的使用
Jun 07 Python
python实现简单的聊天小程序
Jul 07 Python
python使用bs4爬取boss直聘静态页面
Oct 10 #Python
通过案例解析python鸭子类型相关原理
Oct 10 #Python
通过实例解析python subprocess模块原理及用法
Oct 10 #Python
如何使用python自带IDLE的几种方法
Oct 10 #Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 #Python
python如何利用Mitmproxy抓包
Oct 10 #Python
python批量生成条形码的示例
Oct 10 #Python
You might like
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
第十二节--类的自动加载
2006/11/16 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
php 启动报错如何解决
2014/01/17 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
javascript add event remove event
2008/04/07 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
Bootstrap基础学习
2015/06/16 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
python实现顺时针打印矩阵
2019/03/02 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
pyqt5中动画的使用详解
2020/04/01 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
计算机科学与技术应届生求职信
2013/11/07 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
企业趣味活动方案
2014/08/21 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android