iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python装饰器的相关知识点有哪些
  • 730
分享到

Python装饰器的相关知识点有哪些

2023-06-25 12:06:29 730人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python装饰器的相关知识点有哪些”,在日常操作中,相信很多人在Python装饰器的相关知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python装饰器的相关知识点有哪些”的疑

这篇文章主要介绍“python装饰器的相关知识点有哪些”,在日常操作中,相信很多人在Python装饰器的相关知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python装饰器的相关知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    1、装饰器

    装饰器(Decorator):从字面上理解,就是装饰对象的器件。可以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限制条件或者帮助输出。

    装饰器的特点是特点是函数是作为其参数出现的,装饰器还拥有闭包的特点。

    示例代码如下所示:

    # 定义一个装饰器def decorate(func):    def wrapper():        func()        print("已将学生加入学校学生名单")        print("已将学生加入系学生名单")        print("已将学生加入班级名单")    return wrapper@decoratedef student():    print("我是小花")student()'''---输出结果---我是小花已将学生加入学校学生名单已将学生加入系学生名单已将学生加入班级名单'''

    使用**@****符号加函数名**来装饰一个函数

    执行流程:因为student是被装饰的函数,系统将student函数以参数的形式传入decorate函数(装饰器decorate),执行decorate函数,并将返回值赋给student函数。

    上一段代码等于下面这一段代码:

    # 定义一个装饰器def decorate(func):    def wrapper():        func()        print("已将学生加入学校学生名单")        print("已将学生加入系学生名单")        print("已将学生加入班级名单")    return wrapperdef student():    print("我是小花")# 将返回值传给f 并调用f = decorate(student)  # 这里不能加(),不然就表示调用f()'''---输出结果---我是小花已将学生加入学校学生名单已将学生加入系学生名单已将学生加入班级名单'''

    如果student函数外有直接可执行的语句,在不调用student函数的情况下,也会被执行,

    示例代码如下:

    # 定义一个装饰器def decorate(func):    print("这是外部的代码")    def wrapper():        func()        print("已将学生加入学校学生名单")        print("已将学生加入系学生名单")        print("已将学生加入班级名单")    return wrapper@decoratedef student():    print("我是小花")# student()'''---输出结果---这是外部的代码'''

    1.1 应用场景

    可以用于电商网站的判断用户是否登录来是否继续往下执行;添加日志等场景,

    示例代码如下所示:

    # 定义一个装饰器def decorate(func):    def wrapper():        func()        print("正在检验用户是否登录")        # if  # 判断是否登录的代码块        #     pass        print("用户已登录")    return wrapper@decorate  # 使用装饰器def add_shopping_cart():    print("添加成功")@decorate  # 使用装饰器def payment():    print("付款成功")add_shopping_cart()payment()'''---输出结果---添加成功正在检验用户是否登录用户已登录付款成功正在检验用户是否登录用户已登录'''

    2、万能装饰器

    因为函数的参数可能是不固定的,所以可以通过函数的可变参数来完成这种功能。

    示例代码如下:

    def decorate(func):    def wrapper(*args, **kwargs):  # 使用可变参数来达到可以接受任何参数的效果        print("正在检测中。。。")        print(".............")        print("检测完毕")        func(*args, **kwargs)    return wrapper@decorate  # 使用装饰器def f1():  # 无参数    print("这个没有任何功能")@decoratedef f2(name):  # 一个参数    print("名字是:", name)@decoratedef student(*students):  # 多个参数  # *students用于接收多个参数    for ch in students:        print(ch)@decoratedef student_classroom(*students, classroom="前端班"):  # 接收可以赋值的参数    print(f"这是{classroom}的学生")    for ch in students:        print(ch)# 调用函数f1()'''---输出结果---正在检测中。。。.............检测完毕这个没有任何功能'''f2("一碗周")'''---输出结果---正在检测中。。。.............检测完毕名字是: 一碗周'''student("张三", "李四", "王五")'''---输出结果---正在检测中。。。.............检测完毕张三李四王五'''student_classroom("张三", "李四", "王五", classroom="前端班")'''正在检测中。。。.............检测完毕这是前端班的学生张三李四王五'''

    为了防止错误,在定义装饰器的时候要将其设置为万能装饰器

    3、多层装饰器

    多层的执行循序执行顺序是从里到外,最先调用最里层的装饰器,最后调用最外层的装饰器,

    示例代码如下所示:

    def maths(func):  # 定义第一个装饰器    def wrapper(*args, **kwargs):        func(*args, **kwargs)        print("该学生已经学习了数学")    return wrapperdef Chinese(func):  # 定义第而个装饰器    def wrapper(*args, **kwargs):        func(*args, **kwargs)        print("该学生已经学习了语文")    return wrapperdef English(func):  # 定义第三个装饰器    def wrapper(*args, **kwargs):        func(*args, **kwargs)        print("该学生已经学习了英语")    return wrapper@maths@Englishdef student1(name):    print(f"学生{name}已经完成了")@English@Chinese@mathsdef student2(name):    print(f"学生{name}已经完成了")# 调用函数student1("小明")'''学生小明已经完成了该学生已经学习了英语该学生已经学习了数学'''student2("小花")'''学生小花已经完成了该学生已经学习了数学该学生已经学习了语文该学生已经学习了英语'''

    4、带参数的装饰器

    带参数的装饰器一共分为三层,分别如下:

    • 第一层:负责接收装饰器的参数

    • 第二层 :负责接收函数

    • 第三层:负责接收函数的参数

    示例代码如下所示:

    # 装饰器带参数def outer(a):  # 第一层: 负责接收装饰器的参数    def decorate(func):  # 第二层 : 负责接收函数        def wrapper(*args, **kwargs):  # 第三层   负责接收函数的参数            for i in range(a):                print(i)            func(*args, **kwargs)        return wrapper  # 返出来的是:第三层    return decorate  # 返出来的是:第二层@outer(3)def number():    print("打印完毕")number()'''012打印完毕'''

    最外层的函数负责接收装饰器参数,里面的内容还是原装饰器的内容。

    到此,关于“Python装饰器的相关知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Python装饰器的相关知识点有哪些

    本文链接: https://www.lsjlt.com/news/304574.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Python装饰器的相关知识点有哪些
      这篇文章主要介绍“Python装饰器的相关知识点有哪些”,在日常操作中,相信很多人在Python装饰器的相关知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python装饰器的相关知识点有哪些”的疑...
      99+
      2023-06-25
    • python装饰器相关知识点
      小编给大家分享一下python装饰器相关知识点,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、装饰器1.相关知识点*args:负责将多余的位置实参汇总,赋值给a...
      99+
      2023-06-29
    • Python中的装饰器知识点有哪些
      这篇文章主要介绍“Python中的装饰器知识点有哪些”,在日常操作中,相信很多人在Python中的装饰器知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的装饰器知识点有哪些”的疑惑有所...
      99+
      2023-07-02
    • HashMap相关知识点有哪些
      本篇内容介绍了“HashMap相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HashMap 和 HashSet 是 Java...
      99+
      2023-06-17
    • Baseline相关知识点有哪些
      本篇内容主要讲解“Baseline相关知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Baseline相关知识点有哪些”吧! 在 Oracle Da...
      99+
      2024-04-02
    • CSS相关知识点有哪些
      本篇内容介绍了“CSS相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、CSS选择器 ...
      99+
      2024-04-02
    • JVM相关的知识点有哪些
      这篇文章主要讲解了“JVM相关的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM相关的知识点有哪些”吧!JVM作为java运行的基础,很难相...
      99+
      2024-04-02
    • synchronized的相关知识点有哪些
      这篇文章主要讲解了“synchronized的相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“synchronized的相关知识点有哪些”吧!...
      99+
      2024-04-02
    • 有哪些Java的相关知识点
      这篇文章主要介绍“有哪些Java的相关知识点”,在日常操作中,相信很多人在有哪些Java的相关知识点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些Java的相关知识点”的疑惑有所帮助!接下来,请跟着小编...
      99+
      2023-06-16
    • Git的相关知识点有哪些
      这篇文章主要介绍“Git的相关知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Git的相关知识点有哪些”文章能帮助大家解决问题。分支和合并Git 跟其他版本控制系统***的优势就在于其高级...
      99+
      2023-06-17
    • KeyDB的相关知识点有哪些
      今天小编给大家分享一下KeyDB的相关知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。线程模型KeyDB将redi...
      99+
      2023-06-19
    • MySQL相关知识点有哪些
      这篇文章主要介绍了MySQL相关知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1、数据库架构1.1...
      99+
      2024-04-02
    • Git相关知识点有哪些
      这篇文章主要讲解了“Git相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Git相关知识点有哪些”吧!一、Git工作流程以上包括一些简单而常用...
      99+
      2024-04-02
    • YARN相关知识点有哪些
      本篇内容介绍了“YARN相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!YARN产生背景为什么会产生YRAN?这个与MapRe...
      99+
      2023-06-19
    • React的相关知识点有哪些
      这篇文章主要介绍“React的相关知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React的相关知识点有哪些”文章能帮助大家解决问题。React与传统MVC的关系轻量级的视图层库!A J...
      99+
      2023-06-03
    • Git安装位置的相关知识点有哪些
      本文小编为大家详细介绍“Git安装位置的相关知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Git安装位置的相关知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Git 安装位置的意义Gi...
      99+
      2023-07-05
    • library cache相关知识点有哪些
      library cache相关知识点有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。共享游标Sql首次解析后会生成父游标和1个子游标(...
      99+
      2024-04-02
    • java Shiro相关知识点有哪些
      这篇文章主要介绍了java Shiro相关知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java Shiro相关知识点有哪些文章都会有所收获,下面我们一起来看看吧。1.权限的管理1.1 什么是权限管...
      99+
      2023-07-06
    • mysql binlog相关知识点有哪些
      本篇内容主要讲解“mysql binlog相关知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql binlog相关知识点有哪些”吧! ...
      99+
      2024-04-02
    • Oracle Cursor的相关知识点有哪些
      本篇内容介绍了“Oracle Cursor的相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作