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通过scapy获取局域网所有主机mac地址示例
May 04 Python
python和C语言混合编程实例
Jun 04 Python
python中偏函数partial用法实例分析
Jul 08 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
python简单实现操作Mysql数据库
Jan 29 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
详解django中url路由配置及渲染方式
Feb 25 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
Python实现括号匹配方法详解
Feb 10 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
使用Python+Appuim 清理微信的方法
Jan 26 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
discuz目录文件资料汇总
2014/12/30 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
使用PHP开发留言板功能
2019/11/19 PHP
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
js打造数组转json函数
2015/01/14 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
先进党支部申报材料
2014/12/24 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs