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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
跟老齐学Python之一个免费的实验室
Sep 14 Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
python对html过滤处理的方法
Oct 21 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
Django实现文件上传下载
Oct 06 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
python基于win32api实现键盘输入
Dec 09 Python
Python实现打乒乓小游戏
Sep 25 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
BBS(php & mysql)完整版(八)
2006/10/09 PHP
PHP的ASP防火墙
2006/10/09 PHP
php 获取本地IP代码
2013/06/23 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
JavaScript Array对象使用方法解析
2019/09/24 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
Python pymsql模块的使用
2020/09/07 Python
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
遥感技术与仪器求职信
2014/02/22 职场文书
学习演讲稿范文
2014/05/10 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
初一数学教学反思
2016/02/17 职场文书
初中语文教学反思范文
2016/03/03 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
python通过新建环境安装tfx的问题
2022/05/20 Python