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下载Bing图片(代码)
Nov 07 Python
Python内置函数之filter map reduce介绍
Nov 30 Python
Python 的 Socket 编程
Mar 24 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
python搭建微信公众平台
Feb 09 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
Python实现FM算法解析
Jun 18 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
python requests模块的使用示例
Apr 07 Python
Python保存并浏览用户的历史记录
Apr 29 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回溯法解决0-1背包问题实例分析
2015/03/23 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
详解php协程知识点
2018/09/21 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
Python处理中文标点符号大集合
2018/05/14 Python
python的turtle库使用详解
2019/05/10 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
教学改革实施方案
2014/03/31 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL