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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
Python 26进制计算实现方法
May 28 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
python机器学习库常用汇总
Nov 15 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
python操作excel的方法
Aug 16 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 Python
使用Python开发冰球小游戏
Apr 30 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 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP 反向排序和随机排序代码
2010/06/30 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
python 网络编程详解及简单实例
2017/04/25 Python
python实现k-means聚类算法
2018/02/23 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
python使用requests.session模拟登录
2019/08/09 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
tornado+celery的简单使用详解
2019/12/21 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
python实现移动木板小游戏
2020/10/09 Python
python re.match()用法相关示例
2021/01/27 Python
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
绘画设计学生的个人自我评价
2013/09/20 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
西式婚礼主持词
2014/03/13 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
python如何将mat文件转为png
2022/07/15 Python