Python装饰器模式定义与用法分析


Posted in Python onAugust 06, 2018

本文实例讲述了Python装饰器模式定义与用法。分享给大家供大家参考,具体如下:

装饰器模式定义:动态地给一个对象添加一些额外的职责。

在Python中Decorator mode可以按照像其它编程语言如C++, Java等的样子来实现,但是Python在应用装饰概念方面的能力上远不止于此,Python提供了一个语法和一个编程特性来加强这方面的功能。

首先需要了解一下Python中闭包的概念:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

Python装饰器模式定义与用法分析

def makeblod(fn):
  def wrapped():
    return '<b>'+fn()+'</b>'
  return wrapped
def makeitalic(fn):
  def wrapped():
    return '<i>'+fn()+'</i>'
  return wrapped
@makeblod
@makeitalic
def hello():
  return 'hello world'
print hello()

运行结果:

<b><i>hello world</i></b>

Python装饰器模式定义与用法分析

def deco(arg):
  def _deco(func):
    def __deco():
      print "before %s called [%s]." % (func.__name__, arg)
      func()
      print "after %s called [%s]." % (func.__name__, arg)
    return __deco
  return _deco
@deco("mymodule")
def myfunc():
  print "myfunc() called."
myfunc()

运行结果:

before myfunc called [mymodule].
myfunc() called.
after myfunc called [mymodule].

关于闭包学习可参考:https://3water.com/article/54498.htm

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python格式化压缩后的JS文件的方法
Mar 05 Python
python实现聊天小程序
Mar 13 Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 Python
Python3实现的字典遍历操作详解
Apr 18 Python
Python实现E-Mail收集插件实例教程
Feb 06 Python
python地震数据可视化详解
Jun 18 Python
python程序变成软件的实操方法
Jun 24 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
python、Matlab求定积分的实现
Nov 20 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
python中sklearn的pipeline模块实例详解
May 21 Python
如何理解Python中的变量
Jun 01 Python
Python实现的建造者模式示例
Aug 06 #Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 #Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 #Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 #Python
Django添加sitemap的方法示例
Aug 06 #Python
python中scikit-learn机器代码实例
Aug 05 #Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 #Python
You might like
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
Python中基础的socket编程实战攻略
2016/06/01 Python
python图片验证码生成代码
2016/07/02 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
代理协议书范本
2014/04/22 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
电子商务求职信
2014/06/15 职场文书
销售督导岗位职责
2015/04/10 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
少先队工作总结2015
2015/05/13 职场文书
就业推荐表院系意见
2015/06/05 职场文书