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 OS模块常用函数说明
May 23 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
详解Python3序列赋值、序列解包
May 14 Python
python提取照片坐标信息的实例代码
Aug 14 Python
Python chardet库识别编码原理解析
Feb 18 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
Python 实现简单的客户端认证
Jul 29 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
详解python polyscope库的安装和例程
Nov 13 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 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三维数组去重(示例代码)
2013/11/26 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
jquery之empty()与remove()区别说明
2010/09/10 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
python操作xml文件示例
2014/04/07 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
python requests post多层字典的方法
2018/12/27 Python
python实现二维数组的对角线遍历
2019/03/02 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
html5画布旋转效果示例
2014/01/27 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
房地产项目建议书
2014/03/12 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP