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代码来解图片迷宫的方法整理
Apr 02 Python
python日志记录模块实例及改进
Feb 12 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
详解python算法常用技巧与内置库
Oct 17 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 Python
Python基础之tkinter图形化界面学习
Apr 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
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
Django和Flask框架优缺点对比
2019/10/24 Python
Python字节单位转换实例
2019/12/05 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
pandas数据处理之绘图的实现
2020/06/15 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
道德模范先进事迹
2014/02/14 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
平安家庭事迹材料
2014/12/20 职场文书
小学班级口号大全
2015/12/25 职场文书
社区结对共建协议书
2016/03/23 职场文书
利用python做表格数据处理
2021/04/13 Python