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 相关文章推荐
详解Python3.1版本带来的核心变化
Apr 07 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
django主动抛出403异常的方法详解
Jan 04 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
python logging模块的使用
Sep 07 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 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
使用PHP模拟HTTP认证
2006/10/09 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
班级聚会策划书
2014/01/16 职场文书
竞聘书格式及范文
2014/03/31 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书