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基础教程之数字处理(math)模块详解
Mar 25 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python机器学习实战之树回归详解
Dec 20 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
django实现类似触发器的功能
Nov 15 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
python 实现多维数组(array)排序
Feb 28 Python
python deque模块简单使用代码实例
Mar 12 Python
如何使用Python调整图像大小
Sep 26 Python
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
May 14 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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php的4种常见运行方式
2015/03/20 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
DOM相关内容速查手册
2007/02/07 Javascript
function, new function, new Function之间的区别
2007/03/08 Javascript
syntaxhighlighter 使用方法
2007/07/02 Javascript
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
angular2使用简单介绍
2016/03/01 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
10个示例带你掌握python中的元组
2020/11/23 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
电子商务专业个人的自我评价
2013/11/19 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
校本教研活动总结
2014/07/01 职场文书
党建目标管理责任书
2014/07/25 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript