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使用三角迭代计算圆周率PI的方法
Mar 20 Python
你应该知道的python列表去重方法
Jan 17 Python
Python的时间模块datetime详解
Apr 17 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
python中的decimal类型转换实例详解
Jun 26 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
python实点云分割k-means(sklearn)详解
May 28 Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
Python机器学习之逻辑回归
May 11 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 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
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
实例讲解php数据访问
2016/05/09 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
List Installed Hot Fixes
2007/06/12 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
Vue实现附件上传功能
2020/05/28 Javascript
Python实现提取文章摘要的方法
2015/04/21 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python Cookie 读取和保存方法
2018/12/28 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
医药大学生求职简历的自我评价
2013/10/17 职场文书
仓库主管的岗位职责
2013/12/04 职场文书
工作中个人的自我评价
2013/12/31 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript