Python装饰器用法实例分析


Posted in Python onJanuary 14, 2019

本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:

无参数的装饰器

#coding=utf-8
def log(func):
  def wrapper():
    print 'before calling ',func.__name__
    func()
    print 'end calling ',func.__name__
  return wrapper
@log
def hello():
  print 'hello'
@log
def hello2(name):
  print 'hello',name
if __name__=='__main__':
  hello()

运行结果:

before calling  hello
hello
end calling  hello

带参数的装饰器:

#coding=utf-8
def log(func):
  def wrapper(name):
    print 'before calling ',func.__name__
    func(name)
    print 'end calling ',func.__name__
  return wrapper
@log
def hello(name):
  print 'hello',name
@log
def hello2(name):
  print 'hello',name
if __name__=='__main__':
  hello('haha')

运行结果:

before calling  hello
hello haha
end calling  hello

多个参数的时候:

#coding=utf-8
def log(func):
  '''
  *无名字的参数
  **有名字的参数
  :param func:
  :return:
  '''
  def wrapper(*args,**kvargs):
    print 'before calling ',func.__name__
    print 'args',args,'kvargs',kvargs
    func(*args,**kvargs)
    print 'end calling ',func.__name__
  return wrapper
@log
def hello(name,age):
  print 'hello',name,age
@log
def hello2(name):
  print 'hello',name
if __name__=='__main__':
  hello('haha',2)
  hello(name='hehe',age=3)

输出:

end calling  hello
before calling  hello
args () kvargs {'age': 3, 'name': 'hehe'}
hello hehe 3
end calling  hello

装饰器里带参数的情况

本质就是嵌套函数

#coding=utf-8
def log(level,*args,**kvargs):
  def inner(func):
    def wrapper(*args,**kvargs):
      print level,'before calling ',func.__name__
      print level,'args',args,'kvargs',kvargs
      func(*args,**kvargs)
      print level,'end calling ',func.__name__
    return wrapper
  return inner
@log(level='INFO')
def hello(name,age):
  print 'hello',name,age
@log
def hello2(name):
  print 'hello',name
if __name__=='__main__':
  hello('haha',2)

运行输出:

INFO before calling  hello
INFO args ('haha', 2) kvargs {}
hello haha 2
INFO end calling  hello

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中函数及默认参数的定义与调用操作实例分析
Jul 25 Python
python生成ppt的方法
Jun 07 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
python+mysql实现个人论文管理系统
Oct 25 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
Python使用configparser读取ini配置文件
May 25 Python
Python生成并下载文件后端代码实例
Aug 31 Python
python IP地址转整数
Nov 20 Python
pytorch 梯度NAN异常值的解决方案
Jun 05 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 #Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 #Python
对Python多线程读写文件加锁的实例详解
Jan 14 #Python
Python多进程写入同一文件的方法
Jan 14 #Python
python 将大文件切分为多个小文件的实例
Jan 14 #Python
使用k8s部署Django项目的方法步骤
Jan 14 #Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 #Python
You might like
php判断用户是否关注微信公众号
2016/07/22 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
关于php开启错误提示的总结
2019/09/24 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
用Python生成器实现微线程编程的教程
2015/04/13 Python
python保存网页图片到本地的方法
2018/07/24 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
python生成并处理uuid的实现方式
2020/03/03 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
python asyncio 协程库的使用
2021/01/21 Python
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
中职应届生会计求职信
2013/10/23 职场文书
物流管理毕业生自荐信
2013/10/24 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
护士找工作求职信
2014/07/02 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书