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使用cookie库操保存cookie详解
Mar 03 Python
Python中dictionary items()系列函数的用法实例
Aug 21 Python
详解django三种文件下载方式
Apr 06 Python
详解Python发送email的三种方式
Oct 18 Python
Python2和Python3的共存和切换使用
Apr 12 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
python中树与树的表示知识点总结
Sep 14 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
改变 Python 中线程执行顺序的方法
Sep 24 Python
python中@property的作用和getter setter的解释
Dec 22 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
php模拟登陆的实现方法分析
2015/01/09 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
php常用数组函数实例小结
2016/12/29 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
python创建和使用字典实例详解
2013/11/01 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
Python3处理HTTP请求的实例
2018/05/10 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
Python内置加密模块用法解析
2019/11/25 Python
关于python中的xpath解析定位
2020/03/06 Python
python 19个值得学习的编程技巧
2020/08/15 Python
大学生职业生涯设计书
2014/01/02 职场文书
远程研修随笔感言
2014/02/10 职场文书
挂职个人工作总结
2015/03/05 职场文书