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中的多进程
Nov 06 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
基于DataFrame改变列类型的方法
Jul 25 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python实现数据分析与建模
Jul 11 Python
浅析Python语言自带的数据结构有哪些
Aug 27 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
python代码如何注释
Jun 01 Python
pandas处理csv文件的方法步骤
Oct 16 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP 读取和编写 XML
2014/11/19 PHP
基于PHP制作验证码
2016/10/12 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
python3 map函数和filter函数详解
2019/08/26 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
怎样创建、运行java程序
2014/08/01 面试题
行政总经理岗位职责
2013/12/05 职场文书
查环查孕证明
2014/01/10 职场文书
说明书怎么写
2014/05/06 职场文书
法人授权委托书范本
2014/09/17 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书