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 fileinput模块使用实例
May 28 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
不要用强制方法杀掉python线程
Feb 26 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
python实现简单淘宝秒杀功能
May 03 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
python实现飞行棋游戏
Feb 05 Python
适合Python初学者的一些编程技巧
Feb 12 Python
基于Python中Remove函数的用法讨论
Dec 11 Python
python线程优先级队列知识点总结
Feb 28 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
PHP网站基础优化方法小结
2008/09/29 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
javascript表单控件实例讲解
2016/09/13 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
python素数筛选法浅析
2018/03/19 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Pytorch之finetune使用详解
2020/01/18 Python
appium+python adb常用命令分享
2020/03/06 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
应届生求职推荐信
2013/10/28 职场文书
应聘编辑职位自荐信范文
2014/01/05 职场文书
商场活动策划方案
2014/01/24 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
一年级学生评语大全
2014/04/21 职场文书
大学生求职信例文
2014/06/29 职场文书
事业单位岗位说明书
2015/10/08 职场文书
大学生创业计划书
2019/06/24 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python