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 相关文章推荐
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 Python
RC4文件加密的python实现方法
Jun 30 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
Python环境搭建之OpenCV的步骤方法
Oct 20 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
python实现简单倒计时功能
Apr 21 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 Python
python识别围棋定位棋盘位置
Jul 26 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生成Gif图片验证码
2013/10/27 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
Symfony查询方法实例小结
2017/06/28 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
nginx 设置多个站跨域
2021/03/09 Servers
Javascript 类与静态类的实现
2010/04/01 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
Python入门篇之字符串
2014/10/17 Python
Python描述器descriptor详解
2015/02/03 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
python实现事件驱动
2018/11/21 Python
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
秋季运动会通讯稿
2014/01/24 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
Python中的 enumerate和zip详情
2022/05/30 Python