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 27 Python
python查询sqlite数据表的方法
May 08 Python
基于python的字节编译详解
Sep 20 Python
Django中cookie的基本使用方法示例
Feb 03 Python
PyQt5每天必学之组合框
Apr 20 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python安装requests库的实例代码
Jun 25 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
python实现简单图书管理系统
Nov 22 Python
Python第三方库的几种安装方式(小结)
Apr 03 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实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
用python 制作图片转pdf工具
2015/01/30 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
专科毕业生学习生活的自我评价
2013/10/26 职场文书
青年文明号创建承诺
2014/03/31 职场文书
百日安全活动总结
2014/05/04 职场文书
中文专业求职信
2014/06/20 职场文书
员工试用期自我评价
2014/09/18 职场文书
综治维稳工作汇报
2014/10/27 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
python析构函数用法及注意事项
2021/06/22 Python