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中mechanize库的简单使用示例
Jan 10 Python
总结Python中逻辑运算符的使用
May 13 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
Django数据库表反向生成实例解析
Feb 06 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
用 Python 制作地球仪的方法
Apr 24 Python
python 常见的反爬虫策略
Sep 27 Python
详解分布式系统中如何用python实现Paxos
May 18 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 计划任务 检测用户连接状态
2012/03/29 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
PHP中phar包的使用教程
2017/06/14 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
three.js 入门案例详解
2018/01/23 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
2019/01/22 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
JS实现多选框的操作
2020/06/24 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
Django发送html邮件的方法
2015/05/26 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Django--权限Permissions的例子
2019/08/28 Python
python与js主要区别点总结
2020/09/13 Python
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
商务经理岗位职责
2014/08/03 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
给客户的检讨书
2014/12/21 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
创业计划书之书店
2019/09/10 职场文书
python标准库ElementTree处理xml
2022/05/20 Python