Python decorator拦截器代码实例解析


Posted in Python onApril 04, 2020

这个decorator是什么意思呢?

很简单,它接受一个log的参数,即传入logger对象。然后它会先把函数名打印出来,接下来,会利用enumerate函数,将args、kwargs的任意参数给展开,并按顺序输出。最后,它再将func以这些参数包装回去,继续进行函数的执行和结果返回。

例1 最简单

def get_text(name):
  return "hello, {0}".format(name)

def p_decorate(func):
  def func_wrapper(name):
    return "<p>{0}</p>".format(func(name))
  return func_wrapper

my_get_text = p_decorate(get_text)
print(my_get_text("zhangsan"))

例2 参数通用化

def p_decorate(func):
  def func_wrapper(*args, **kwargs):
    return "<p>{0}</p>".format(func(*args, **kwargs))
  return func_wrapper

class Person(object):
  def __init__(self):
    self.name = "Neng"
    self.family = "Xiong"

  @p_decorate
  def get_fullname(self):
    return self.name+" "+self.family

my_person = Person()
print(my_person.get_fullname())

例3 根据参数,实现动态拦截器

def tags(tag_name):
  def tags_decorator(func):
    def func_wrapper(*args, **kargs):
      return "<{0}>{1}</{0}>".format(tag_name, func(*args, **kargs))
    return func_wrapper
  return tags_decorator

@tags("div")
@tags("p")
@tags("strong")
def get_text(name):
  return "hello, "+name

print(get_text("zhangsan"))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python深入学习之对象的属性
Aug 31 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
详解python的四种内置数据结构
Mar 19 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
python压包的概念及实例详解
Feb 17 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 #Python
Python实现多线程下载脚本的示例代码
Apr 03 #Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 #Python
pycharm安装及如何导入numpy
Apr 03 #Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 #Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 #Python
Numpy 理解ndarray对象的示例代码
Apr 03 #Python
You might like
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
php写app用的框架整理
2019/09/29 PHP
再谈javascript面向对象编程
2012/03/18 Javascript
js加强的经典分页实例
2013/03/15 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
浅谈js中的this问题
2017/08/31 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
vue中监听返回键问题
2019/08/28 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
用js实现放大镜效果
2020/10/28 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
Python编程之多态用法实例详解
2015/05/19 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
毕业学生推荐信
2013/12/01 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
违章停车检讨书
2014/10/21 职场文书
转让协议书
2015/01/27 职场文书
会议室管理制度范本
2015/08/06 职场文书