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 相关文章推荐
go和python变量赋值遇到的一个问题
Aug 31 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
python批量替换多文件字符串问题详解
Apr 22 Python
用Python3创建httpServer的简单方法
Jun 04 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
Django框架orM与自定义SQL语句混合事务控制操作
Jun 27 Python
解决python有时候import不了当前的包问题
Aug 28 Python
python3 pillow模块实现简单验证码
Oct 31 Python
Python几种常见算法汇总
Jun 02 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
用python删除文件夹中的重复图片(图片去重)
May 12 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
global.php
2006/12/09 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
Python高效编程技巧
2013/01/07 Python
python正则表达式re之compile函数解析
2017/10/25 Python
python机器学习之贝叶斯分类
2018/03/26 Python
Python实现的读写json文件功能示例
2018/06/05 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
如何在sublime编辑器中安装python
2020/05/20 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
留学自荐信的技巧
2013/10/17 职场文书
生产主管岗位职责
2013/11/10 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
学校大课间活动方案
2014/01/30 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
新闻编辑求职信
2014/07/13 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
vue修饰符.capture和.self的区别
2022/04/22 Vue.js