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中的闭包总结
Sep 18 Python
python函数装饰器用法实例详解
Jun 04 Python
python并发和异步编程实例
Nov 15 Python
python用pandas数据加载、存储与文件格式的实例
Dec 07 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
使用Python实现微信拍一拍功能的思路代码
Jul 09 Python
Python类class参数self原理解析
Nov 19 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
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
教师实习自我鉴定
2013/12/13 职场文书
培训协议书范本
2014/04/22 职场文书
挂靠协议书范本
2014/04/22 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
法院授权委托书格式
2014/09/28 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android