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运用于数据分析的简单教程
Mar 27 Python
python操作字典类型的常用方法(推荐)
May 16 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
Python常见内置高效率函数用法示例
Jul 31 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
python装饰器代码深入讲解
Mar 01 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的宝库目录--PEAR
2006/10/09 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php去除数组中重复数据
2014/11/18 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
前端性能优化及技巧
2016/05/06 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
原生js调用json方法总结
2018/02/22 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
python 调用c语言函数的方法
2017/09/29 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
python中adb有什么功能
2020/06/07 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
英语自荐信范文
2013/12/11 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
推普周活动总结
2014/08/28 职场文书
小学四年级学生评语
2014/12/26 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
黄埔军校观后感
2015/06/10 职场文书
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js
Python Pandas解析读写 CSV 文件
2022/04/11 Python