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 相关文章推荐
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
python计算一个序列的平均值的方法
Jul 11 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
python读取并写入mat文件的方法
Jul 12 Python
解决python-docx打包之后找不到default.docx的问题
Feb 13 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
Python中如何引入第三方模块
May 27 Python
python计算auc的方法
Sep 09 Python
python 模拟登录B站的示例代码
Dec 15 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 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
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
初步讲解Python中的元组概念
2015/05/21 Python
Python中random模块生成随机数详解
2016/03/10 Python
Python数据类型详解(一)字符串
2016/05/08 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
python3处理word文档实例分析
2020/12/01 Python
Python编写万花尺图案实例
2021/01/03 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
TCP/IP的分层模型
2013/10/27 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
军人违纪检讨书
2014/02/04 职场文书
电影建国大业观后感
2015/06/01 职场文书
小学语文国培研修日志
2015/11/13 职场文书