本文主要介绍“Python装饰器的相关知识点有哪些” 。在日常操作中 , 相信很多人对Python装饰器的相关知识点有所怀疑 。边肖查阅了各种资料 , 整理出简单易用的操作方法 , 希望能帮助大家解答“Python装饰器有哪些相关知识点”的疑惑!接下来 , 请和边肖一起学习!00-1010装饰器(Decorator):字面意思是装饰物品的装置 。在不修改原代码的情况下 , 可以给修饰对象增加新的功能 , 也可以增加限制或帮助输出 。装饰器的特点是函数作为它们的参数出现 , 并且它们还具有闭包的特性 。示例代码如下所示:#定义一个装饰师 。def装修(功能):defwrapper():func()打印(学生已添加到学校学生列表中)打印(学生已添加到系学生列表中)打印(学生已添加到班级列表中)returnwrapperdefstudent():印刷体(“我是小华”)-输出结果- 。我是小华 。将学生添加到学校学生列表中 。学生已被添加到该系的学生名单中 。学生已被添加到班级名单中 。用符号* * @ * * * * *加上函数名* *来修饰函数 。由于执行流程:学生是一个修饰函数 , 系统将学生函数以参数的形式传递给修饰函数 , 执行修饰函数 , 并将返回值赋给学生函数 。上一段代码等于下面这一段代码:#定义一个装饰师 。def装修(功能):defwrapper():func()打印(学生已添加到学校学生列表中)打印(学生已添加到系学生列表中)打印(学生已添加到班级列表中)returnwrapperdefstudent():印刷体(“我是小华”)#将返回值传递给f并调用 。F=修饰(学生)#这里不能加() , 否则意味着调用 。-输出结果- 。我是小华 。将学生添加到学校学生列表中 。学生已被添加到该系的学生名单中 。学生已被添加到班级名单中 。如果在学生函数之外有直接可执行的语句 , 它们也将在不调用学生函数的情况下执行 。示例代码如下:#定义一个装饰师 。def装修(功能):打印(“这是外部代码”)bsp;def wrapper():
func()
print( 已将学生加入学校学生名单 )
print( 已将学生加入系学生名单 )
print( 已将学生加入班级名单 )
return wrapper
@decorate
def student():
print( 我是小花 )
# student()
输出结果
这是外部的代码
1.1 应用场景【Python装饰器的相关知识点有哪些】可以用于电商网站的判断用户是否登录来是否继续往下执行;添加日志等场景 ,
示例代码如下所示:
# 定义一个装饰器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)# 调用函数---输出结果---正在检测中 。。。.............这个没有任何功能f2( 一碗周 )---输出结果---正在检测中 。。。.............名字是: 一碗周student( 张三 ,李四 ,王五 )---输出结果---正在检测中 。。。.............student_classroom( 张三 ,李四 ,王五 , classroom= 前端班 )正在检测中 。。。.............这是前端班的学生
推荐阅读
- 亚马逊电商平台是真的吗,亚马逊代下单靠谱吗
- 使用代理ip为什么要选择高质量正规动态ip
- Javascript中DOM、节点和获取元素的示例分析
- springboot中如何整合log4g2
- Python怎么实现装饰器
- CSS中解决div列高度自适应的3种常用方法分别是什么
- JavaScript中数组Array的常用方法有哪些
- Java中如何把二叉搜索树转换为累加树
- 锅具如何选择