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

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

本文主要介绍“Python装饰器的相关知识点有哪些”。在日常操作中,相信很多人对Python装饰器的相关知识点有所怀疑。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“Python装饰器有哪些相关知识点”的疑惑!接下来,请和边肖一起学习!

00-1010装饰器(Decorator):字面意思是装饰物品的装置。在不修改原代码的情况下,可以给修饰对象增加新的功能,也可以增加限制或帮助输出。

装饰器的特点是函数作为它们的参数出现,并且它们还具有闭包的特性。

示例代码如下所示:

#定义一个装饰师。

def装修(功能):

defwrapper():

func()

打印(学生已添加到学校学生列表中)

打印(学生已添加到系学生列表中)

打印(学生已添加到班级列表中)

returnwrapper

@装饰

defstudent():

印刷体(“我是小华”)

学生()

'''

-输出结果-。

我是小华。

将学生添加到学校学生列表中。

学生已被添加到该系的学生名单中。

学生已被添加到班级名单中。

''用符号* * @ * * * * *加上函数名* *来修饰函数。

由于执行流程:学生是一个修饰函数,系统将学生函数以参数的形式传递给修饰函数,执行修饰函数,并将返回值赋给学生函数。

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

#定义一个装饰师。

def装修(功能):

defwrapper():

func()

打印(学生已添加到学校学生列表中)

打印(学生已添加到系学生列表中)

打印(学生已添加到班级列表中)

returnwrapper

defstudent():

印刷体(“我是小华”)

#将返回值传递给f并调用。

F=修饰(学生)#这里不能加(),否则意味着调用。

(f)

'''

-输出结果-。

我是小华。

将学生添加到学校学生列表中。

学生已被添加到该系的学生名单中。

学生已被添加到班级名单中。

如果在学生函数之外有直接可执行的语句,它们也将在不调用学生函数的情况下执行。

示例代码如下:

#定义一个装饰师。

def装修(功能):

打印(“这是外部代码”)

n

bsp;def wrapper():
        func()
        print("已将学生加入学校学生名单")
        print("已将学生加入系学生名单")
        print("已将学生加入班级名单")
    return wrapper
@decorate
def 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("这个没有任何功能")
@decorate
def f2(name):  # 一个参数
    print("名字是:", name)
@decorate
def student(*students):  # 多个参数  # *students用于接收多个参数
    for ch in students:
        print(ch)
@decorate
def 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 wrapper
def Chinese(func):  # 定义第而个装饰器
    def wrapper(*args, **kwargs):
        func(*args, **kwargs)
        print("该学生已经学习了语文")
    return wrapper
def English(func):  # 定义第三个装饰器
    def wrapper(*args, **kwargs):
        func(*args, **kwargs)
        print("该学生已经学习了英语")
    return wrapper
@maths
@English
def student1(name):
    print(f"学生{name}已经完成了")
@English
@Chinese
@maths
def 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()
'''
0
1
2
打印完毕
'''

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

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

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65900.html

(0)

相关推荐

  • 为什么数据库会丢失数据

    技术为什么数据库会丢失数据今天就跟大家聊聊有关为什么数据库会丢失数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据库管理系统在今天已经是软件的重要组成部分,开

    攻略 2021年12月2日
  • 网络很火的句子,你认为最尴尬的网络句子是什么

    技术网络很火的句子,你认为最尴尬的网络句子是什么我认为最尴尬的网络句子是:条条道路通罗马,有人出生在罗马网络很火的句子。
    这句话说得太深刻,太有道理,让我感触颇多,心里十分郁闷,感到无比尴尬。大家想一想,我们一生拼死拼活

    生活 2021年10月21日
  • 怎么利用python爬取城市公交站点

    技术怎么利用python爬取城市公交站点本篇内容介绍了“怎么利用python爬取城市公交站点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年12月9日
  • 送闺蜜结婚礼物排行榜,闺蜜结婚我送什么礼物比较好呢

    技术送闺蜜结婚礼物排行榜,闺蜜结婚我送什么礼物比较好呢从某种意义上而言送闺蜜结婚礼物排行榜,创意的多少取决于你为准备那礼物花了多少心思。 所以了,你可以自制礼物,比如个性电子相册、幸运星等等。当然,可以送买的礼物,但需要

    生活 2021年10月21日
  • 分数化小数,数学家是怎么将分数化为小数的

    技术分数化小数,数学家是怎么将分数化为小数的说说自己吧分数化小数!1986年看了《小学数学教师》第4期鲍刚的一篇《质数之最》,产生了对数的计算。于是,贪黑爬半夜地算分数化小数。
    开始用竖式计算单位分数化小数。
    这样算,觉

    生活 2021年10月28日
  • html瀑布流布局(瀑布流式页面布局是什么)

    技术JS、flex 、column实现瀑布流布局的方式是怎样的这篇文章将为大家详细讲解有关JS、flex 、column实现瀑布流布局的方式是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后

    2021年12月20日