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开发之字符串string操作方法实例详解
Nov 12 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
python获取交互式ssh shell的方法
Feb 14 Python
django 环境变量配置过程详解
Aug 06 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
win10从零安装配置pytorch全过程图文详解
May 08 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
浅析python实现动态规划背包问题
Dec 31 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模板页面中分页代码的解析
2009/02/06 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
js数组操作常用方法
2014/05/08 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
法律专业应届本科毕业生求职信
2013/10/25 职场文书
新闻传播专业求职信
2014/07/22 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
员工工作表现自我评价
2015/03/06 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
离职告别感言
2015/08/04 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
Python机器学习之PCA降维算法详解
2021/05/19 Python
python获取带有返回值的多线程
2022/05/02 Python