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实现问号表达式(?)的方法
Nov 27 Python
Python对象的深拷贝和浅拷贝详解
Aug 25 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
pytorch自定义初始化权重的方法
Aug 17 Python
Django CSRF认证的几种解决方案
Mar 03 Python
解决Python spyder显示不全df列和行的问题
Apr 20 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
Feb 24 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调用Oracle存储过程的方法
2008/09/12 PHP
PHP学习笔记之二
2011/01/17 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
理工类毕业自我鉴定
2014/02/20 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
小学运动会口号
2014/06/07 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS