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列表(list)常用操作方法小结
Feb 02 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
学习python类方法与对象方法
Mar 15 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
python 连接sqlite及简单操作
Jun 30 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
Python在不同目录下导入模块的实现方法
Oct 27 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
python数字图像处理之高级形态学处理
Apr 27 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
PHP数据流应用的一个简单实例
2012/09/14 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
在模板页面的js使用办法
2010/04/01 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
详解javascript高级定时器
2015/12/31 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
Python全局变量用法实例分析
2016/07/19 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
详解Django CAS 解决方案
2019/10/30 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
平面设计岗位职责
2013/12/14 职场文书
挂科检讨书范文
2014/02/20 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
保护环境演讲稿
2014/05/10 职场文书
找工作求职信
2014/07/07 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
田径运动会广播稿
2015/08/19 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
python内置模块之上下文管理contextlib
2022/06/14 Python
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript
box-shadow单边阴影的实现
2023/05/21 HTML / CSS