Python 装饰器代码解析

 更新时间:2021年11月02日 16:03:58   作者:TORTOISR  
装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享几个示例

前言:

以往看到我博客的小伙伴可能都知道,我的前言一般都是吐槽和讲废话环节,哈哈哈哈。今天难得休息,最近可真是太忙了,博主已经连续一年都在996了,所以最近没怎么学习新东西,只能回顾以往的旧知识了,上周一起工作的小伙伴扛不住996离职了,我们三人的小团队也正式解散了,哎。原本想着找时间好好整理一个关于关于接口自动化测试或ceph相关的东西。但由于篇幅过长这里目前可能不会着手写这方面东西。其实啊写是很简单的,主要例子难找。哈哈哈哈。
好了回归正题吧。看过我以往博客的小伙伴肯定见我用过@parameterized.expand()用作参数化的装饰器。这属于系统定义装饰器,当然我们自己也可以自定义装饰器已适合我们日常的开发需求。
**什么是装饰器:**装饰器的本质就是一个函数,作用是在不改变源代码的情况下,给函数增加额外的功能;装饰器的使用通过@语法糖进行调用。

普通装饰器:

直接上代码吧。

def demo(func_test):
    def wrapper():
        print('定义的第一个装饰器')
        func_test()
        print('装饰器结束')
    return wrapper    #这里注意不要加括号


@demo
def func_test():
    print('小白小白!!!!')

在这里插入图片描述

直接使用自定义装饰器强化的原方法。
带有参数的装饰器:

def demo(func_test):
    def wrapper(name):
        print('定义的第一个装饰器')
        func_test(name)
        print('哦,你就是%s啊'%name)
        print('装饰器结束')
    return wrapper


@demo
def func_test(name):
    print('大家好我叫%s'%name)

在这里插入图片描述

是不是有点感觉了啊。
接下来就是不带自定义参数的装饰器

def demo(func_test):
    def wrapper(*name,**kwargs):
        print('定义的第一个装饰器')
        func_test(*name,**kwargs)
        print('哦,你就是%s啊'%name[0])
        print('你今年%s岁啊'%name[1])
        print('装饰器结束')
    return wrapper


@demo
def func_test(name,age):
    print('大家好我叫%s'%name)
    print('今年{}'.format(age))

在这里插入图片描述

是不是很简答啊。哈哈哈哈
多个装饰一起使用。

def deco01(func):
    def wrapper(*args,**kwargs):
        print('第一层的装饰器')
        func(*args,**kwargs)
        print('第一层装饰器结束')
    return wrapper


def deco02(func):
    def wrapper(*args,**kwargs):
        print('这是第二层装饰器')
        print('第二层装饰器结束')
        func(*args, **kwargs)
    return wrapper


@deco02
@deco01
def func(a,b,c,name):
    print('hello ,here is a func')
    print("result is %d" %(a+b+c))
    print('name:{}'.format(name))

在这里插入图片描述

看看执行顺序可以看出装饰器是从上往下执行的。
类装饰器:
在使用装饰器时我们总不能在一个文件里写的都是装饰器和各个方法吧,总是要分开的。这里就要是讲一个类装饰器。
这里呢,我大概了写了一个读取文件装饰器的例子。

class Mydecorator():
    def __init__(self,func):
    # 定义为私有属性
        self.func = func
    # 实现__call__方法,让对象变成可以调用的对象,可调用的对象可以想函数那样使用
    def __call__(self, *args, **kwargs):   
        print('测试类装饰器')
        self.func(*args)
        catalogue = args[0]
        suffix = catalogue.split('.')[2]
        try:
            if suffix == 'json':
                with open(*args,'r',encoding='utf-8') as file_object:
                    contents = json.load(file_object)
                    print(contents)
            else:
                with open(*args,'r',encoding='utf-8') as file_object:
                    contents = file_object.read()
                    print(contents)
        except Exception as a:
            print('读取文件出错拉:{}'.format(a))
@Mydecorator
def name(name):
    print('请输入对应文件路径:%s'%name)

在这里插入图片描述

是不是很好用啊。哈哈哈哈

到此这篇关于Python 装饰器代码解析的文章就介绍到这了,更多相关Python 装饰器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中的np.setdiff1d()函数详解

    Python中的np.setdiff1d()函数详解

    Python中的np.setdiff1d()函数可用于找出两个序列集合中元素的差异,下面通过示例代码给大家详细讲解,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • pyhton中__pycache__文件夹的产生与作用详解

    pyhton中__pycache__文件夹的产生与作用详解

    这篇文章主要介绍了pyhton中__pycache__文件夹的产生与作用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • pygame多种方式实现屏保操作(自动切换、鼠标切换、键盘切换)

    pygame多种方式实现屏保操作(自动切换、鼠标切换、键盘切换)

    这篇文章主要介绍了pygame多种方式实现屏保操作(自动切换、鼠标切换、键盘切换),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • PyQt5事件处理之定时在控件上显示信息的代码

    PyQt5事件处理之定时在控件上显示信息的代码

    这篇文章主要介绍了PyQt5事件处理之定时在控件上显示信息的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • python的pygal模块绘制反正切函数图像方法

    python的pygal模块绘制反正切函数图像方法

    在本篇文章中我们给大家整理了关于如何用python的pygal模块绘制反正切函数图像的知识点内容,有需要的朋友们可以学习下。
    2019-07-07
  • python实现的一只从百度开始不断搜索的小爬虫

    python实现的一只从百度开始不断搜索的小爬虫

    这是我第三天学python了, 想写一个东西纪念一下吧,于是写了一直爬虫,但是不是好的虫,只能讲网页的关键词存到本地, 但是我觉得基本上算是一只小虫了
    2013-08-08
  • Python实现极限车神游戏的示例代码

    Python实现极限车神游戏的示例代码

    今天小编要为大家介绍一款小编自己用Python代码码出来的赛车风格的打字小游戏,不仅能游戏还能学到很多不同类型的编程代码关键字的语言,需要的可以参考一下
    2023-02-02
  • NumPy 矩阵乘法的实现示例

    NumPy 矩阵乘法的实现示例

    这篇文章主要介绍了NumPy 矩阵乘法的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python利用百度云接口实现车牌识别的示例

    python利用百度云接口实现车牌识别的示例

    这篇文章主要介绍了python利用百度云接口实现车牌识别的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Jupyter Notebook出现不是内部或外部的命令解决方案

    Jupyter Notebook出现不是内部或外部的命令解决方案

    这篇文章主要介绍了Jupyter Notebook出现不是内部或外部的命令解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论