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中的装饰器用法详解
Jan 14 Python
python实现将内容分行输出
Nov 05 Python
Python实现读取并保存文件的类
May 11 Python
Python多层装饰器用法实例分析
Feb 09 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
Python的UTC时间转换讲解
Feb 26 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
浅析python redis的连接及相关操作
Nov 07 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
python实现调用摄像头并拍照发邮箱
Apr 27 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 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
discuz的php防止sql注入函数
2011/01/17 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
简单介绍python封装的基本知识
2019/08/10 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
区三好学生主要事迹
2014/01/30 职场文书
协议书与合同的区别
2014/04/18 职场文书
代理协议书
2014/04/22 职场文书
体育教师求职信
2014/06/30 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
学校四风对照检查材料
2014/08/28 职场文书
小学优秀教师材料
2014/12/15 职场文书
委托收款证明
2015/06/23 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers