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 fabric实现远程操作和部署示例
Mar 25 Python
简单了解什么是神经网络
Dec 23 Python
Python实现通讯录功能
Feb 22 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
python 提取key 为中文的json 串方法
Dec 31 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
Python如何将字符串转换为日期
Jul 31 Python
Python字典dict常用方法函数实例
Nov 09 Python
python自动化之如何利用allure生成测试报告
May 02 Python
Python使用openpyxl批量处理数据
Jun 23 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连接函数implode与分割explode的深入解析
2013/06/26 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP实现递归的三种方法
2020/07/04 PHP
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python中的多重装饰器
2015/04/11 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
苹果美国官方商城:Apple美国
2016/08/24 全球购物
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
上海中网科技笔试题
2012/02/19 面试题
Java语言的优势
2015/01/10 面试题
综合办公室主任职责
2013/12/16 职场文书
培训自我鉴定
2014/01/31 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
解决Oracle数据库用户密码过期
2022/05/11 Oracle
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL