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 13 Python
Python生成随机密码
Mar 10 Python
python生成验证码图片代码分享
Jan 28 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
Sanic框架配置操作分析
Jul 17 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
pycharm 配置远程解释器的方法
Oct 28 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
Python通过Pillow实现图片对比
Apr 29 Python
Django在Model保存前记录日志实例
May 14 Python
Pymysql实现往表中插入数据过程解析
Jun 02 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
第七节 类的静态成员 [7]
2006/10/09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
php生成二维码
2015/08/10 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
js表单验证实例讲解
2016/03/31 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python批量下载抖音视频
2019/06/17 Python
python 提取文件指定列的方法示例
2019/08/07 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
python自动点赞功能的实现思路
2020/02/26 Python
行政办公员自我评价分享
2013/12/14 职场文书
大学生饮食配送创业计划书
2014/01/04 职场文书
培训研修方案
2014/06/06 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
python基础之while循环语句的使用
2021/04/20 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android