python--装饰器
[掌握]装饰器入门
语法糖
==目标:==掌握装饰器的快速使用。
装饰器本质上就是闭包,但装饰器有特殊作用,那就是:在不改变原有函数的基础上,给原有函数增加额外功能。
定义装饰器:
def outer([外面参数列表]):def inner([内部参数列表]):新增额外功能代码.......[引用]return inner
使用装饰器的标准语法:
# 语法糖
@outer
def 函数名():代码...
例如,一起来完成:
(1)我们知道,发表评论前是需要先登录的;
(2)接着,先定义有发表评论的功能函数;
(3)使用语法糖方式,在不改变原有函数的基础上,提示用户要先登录~。
# 接下来,要对func函数进行增强,编写闭包
def outer(func):def inner():print('先要登录!')func()print('评论成功!')return inner # inner函数本质上就是增强版的func函数# 定义你要对哪个函数进行增强
@outer
def func():print('发表评论!')if __name__ == '__main__':func()
==总结:==
(1)装饰器本质上就是闭包,作用是在不改变原有函数的基础上,给原有函数增加额外功能;
(2)要构成装饰器,要满足4个条件:有嵌套、有引用、有返回、()。==A、有额外功能==;B、有结果;
*传统方式
==目标:==了解装饰器的传统方式与执行流程。
定义装饰器:
def outer([外面参数列表]):def inner([内部参数列表]):新增额外功能代码.......[引用]return inner
使用装饰器的传统方式语法:
# 传统方式
变量名 = outer([外面参数列表])
变量名([内部参数列表])
例如,一起来完成:
(1)我们知道,发表评论前是需要先登录的;
(2)接着,先定义有发表评论的功能函数;
(3)使用传统方式,在不改变原有函数的基础上,提示用户要先登录~;
(4)了解装饰器的执行流程。
# 接下来,要对func函数进行增强,编写闭包
def outer(func):def inner():print('先要登录!')func()print('评论成功!')return inner # inner函数本质上就是增强版的func函数# 定义你要对哪个函数进行增强
def func():print('发表评论!')if __name__ == '__main__':inner_func = outer(func)inner_func()
==总结:==
(1)使用装饰器时,应该优先考虑使用:();==A、语法糖==;B、传统方式;
(2)为了更好的了解装饰器的执行流程,可以通过装饰器的传统方式来了解。
[了解]函数分类
==目标:==了解函数的分类有哪些?
对于函数的使用,可以根据有无参数、有无返回值来进行分类。分为:
(1)无参无返回值的函数
(2)有参无返回值的函数
(3)无参有返回值的函数
(4)有参有返回值的函数
无参无返回值的函数的语法:
# 定义
def 函数名():
代码
...
# 调用
函数名()
有参无返回值的函数的语法:
# 定义
def 函数名(参数1, 参数2, ...):
代码
...
# 调用
函数名(值1, 值2, ...)
无参有返回值的函数的语法:
# 定义
def 函数名():
代码
...
return 值
# 调用
变量名 = 函数名()
有参有返回值的函数的语法:
# 定义
def 函数名(参数1, 参数2, ...):
代码
...
return 值
# 调用
变量名 = 函数名(值1, 值2, ...)
==总结:==
(1)我们会发现,函数的分类有4种,那么对应于装饰器也有4种;
(2)注意:对函数来分类,主要是根据有无参数和返回值来划分的。
[掌握]装饰无参无返回值的函数
==目标:==掌握如何装饰无参无返回值的函数。
当使用装饰器装饰无参无返回值的函数时,语法:
def outer(func):def inner():新增额外功能代码.......[引用]return inner
例如,一起来完成:
(1)在给无参无返回值的原有函数求和计算结果之前;
(2)添加一个友好提示(注意:不能改变源码):正在努力计算中...
# 1.定义装饰器
def outer(func):def inner(): # 有嵌套print("=======正在努力计算中...========") # 有额外功能func() # 有引用return inner # 有返回# 2.使用装饰器
# 3.定义函数
@outer
def get_sum():a = 10b = 23sum = a + bprint(f"两数之和为:{sum}")# 4.调用函数
get_sum()
==总结:==
(1)当被装饰的函数没有参数时,对应定义的装饰器的内部函数也没有参数;
(2)注意:当被装饰的函数没有返回值时,对应定义的装饰器的内部函数也没有返回值.。
[掌握]装饰有参无返回值的函数
==目标:==掌握如何装饰有参无返回值的函数。
当使用装饰器装饰有参无返回值的函数时,语法:
def outer(func):def inner(参数1, 参数2, ...):新增额外功能代码.......[引用]return inner
例如,一起来完成:
(1)在给有参无返回值的原有函数求和计算结果之前;
(2)添加一个友好提示(注意:不能改变源码):正在努力计算中...。
def outer(func):
def inner(x,y): # 有嵌套
==总结:==
(1)请问:当被装饰的原有函数有参数时,装饰器的内部函数也有对应个数的参数,这句话正确吗?==A、正确==;B、错误。
[掌握]装饰无参有返回值的函数
==目标:==掌握如何装饰无参有返回值的函数。
当使用装饰器装饰无参有返回值的函数时,语法:
def outer(func):def inner():新增额外功能代码.......[引用]return 值 # 要返回值return inner
例如,一起来完成:
(1)在给无参有返回值的原有函数求和计算结果之前;
(2)添加一个友好提示(注意:不能改变源码):正在努力计算中...。
# 1.定义装饰器
def outer(func):def inner():print("=====正在努力计算中...")result = func()return resultreturn inner# 2.使用装饰器
# 3.定义函数
@outer
def get_sum():a = 19b = 23sum = a + breturn sum# 4.调用函数
print(get_sum())
==总结:==
(1)当原有函数有返回值时,记住:装饰器的内部函数也需要返回结果,否则没有输出效果。
[掌握]装饰有参有返回值的函数
==目标:==掌握如何装饰有参有返回值的函数。
当使用装饰器装饰有参有返回值的函数时,语法:
def outer(func):def inner(参数1, 参数2, ...):新增额外功能代码.......[引用]return 值 # 要返回值return inner
例如,一起来完成:
(1)在给有参有返回值的原有函数求和计算结果之前;
(2)添加一个友好提示(注意:不能改变源码):正在努力计算中...。
# 接下来,要对func函数进行增强,编写闭包
def outer(func):def inner(a,b): #被增强的函数func,有两个参数,则这里的inner也必须有两个参数,因为inner是增强版的funcprint('求和前!')result = func(a,b)return result # 被增强函数有返回值,这里也必须有返回值 这里的return,一般返回被增强函数的返回值return inner # inner函数本质上就是增强版的func函数# 定义你要对哪个函数进行增强
@outer
def func(a,b): # 有参无返回值return a+bif __name__ == '__main__':result = func(10,20)print(result)
==总结:==
(1)当被装饰的原有函数有参有返回值时,定义的装饰器类型应该在内部函数中要有参数,也要有返回值;
(2)当要构成装饰器的条件时,需要满足:有嵌套、有引用、()、有额外功能。==A、有返回==;B、有装饰;
相关文章:

python--装饰器
[掌握]装饰器入门 语法糖 目标:掌握装饰器的快速使用。 装饰器本质上就是闭包,但装饰器有特殊作用,那就是:在不改变原有函数的基础上,给原有函数增加额外功能。 定义装饰器: def outer([外面参数列表]):…...
Docker:定义未来的软件部署
1. 概述 Docker,这个在技术圈里频频被提及的名词,实际上是一种开源的容器化技术。它允许开发者将应用程序及其依赖打包成一个标准化的单元——容器,确保应用在任何环境中都能够一致地运行。从开发者的本地机器到全球的云平台,Doc…...
ros常用环境变量
RMW层DDS实现 rti dds export RMW_IMPLEMENTATIONrmw_connextdds //rti dds 或者 RMW_IMPLEMENTATIONrmw_connextdds ros2 run ... export NDDS_QOS_PROFILES/qos.xml //配置qos文件fastdds export RMW_IMPLEMENTATIONrmw_fastrtps_cpp 或者 RMW_IMPLEMENTATIONrmw_fas…...
python学习 - 爬虫案例 - 爬取链接房产信息入数据库代码实例
#codingutf-8 #!/usr/bin/python # 导入requests库 import requests # 导入文件操作库 import os import re import bs4 from bs4 import BeautifulSoup import sys from util.mysql_DBUtils import mysql# 写入数据库 def write_db(param):try:sql "insert into house (…...
Git 完整操作之记录
目录 一 . Git 基本操作流程及示例代码 1. 初始化 Git 仓库 2. 克隆远程仓库 3. 检查当前状态 4. 添加文件到暂存区 5. 提交更改 6. 查看提交历史 7. 创建分支 8. 切换分支 9. 合并分支 10. 推送更改到远程仓库 11. 拉取远程仓库的更改 12. 回滚到上一个版本 二…...
mediaPlayer的内存泄露解决方法
MediaPlayer在Android中用于播放音频和视频。如果不正确管理,MediaPlayer可能会导致内存泄漏,尤其是当它被用于多个Activity或长时间播放时。以下是一些解决MediaPlayer内存泄漏的方法: ### 1. 及时释放资源 当MediaPlayer不再使用时&#x…...
delphi3层 delphi 3层
一、为DataSnap系统服务程序添加描述 procedure TServerContainer.ServiceAfterInstall(Sender: TService); var reg: TRegistry; begin reg : TRegistry.Create; try with reg do begin RootKey : HKEY_LOCAL_MACHINE; if OpenKey(SYSTEM/CurrentC…...

Python编程学习第一篇——制作一个小游戏休闲一下
到上期结束,我们已经学习了Python语言的基本数据结构,除了数值型没有介绍,数值型用的非常广,但也是最容易理解的,将在未来的学习中带大家直接接触和学习掌握。后续我们会开始学习这门语言的一些基础语法和编程技巧&…...

03--nginx架构实战
前言:这应该是nginx梳理的最后一章,写一些关于网站架构和网站上线的知识内容,主要是感觉到运维并不是单一方向的行业,这一章概念会有一些广泛,但是非常重要,都是这几年工作中遇到的情况,整理一下…...

【力扣第 400 场周赛】Leetcode 删除星号以后字典序最小的字符串
文章目录 1. 删除星号以后字典序最小的字符串 1. 删除星号以后字典序最小的字符串 题目链接 🍎 解题思路:遇到 *就删除一个字符,为了满足题意,要删除字典序最小的字符,那么假如有多个字典序最小的字符我们该删除哪个…...

Unity DOTS技术(九) BufferElement动态缓冲区组件
文章目录 一.简介二.例子 一.简介 在之前的学习中我们发现Entity不能挂载相同的组件的. 当我们需要用相同的组件时则可以使用.IBufferElementData接口 动态缓冲区组件来实现 二.例子 1.创建IBufferElementData组件 using Unity.Entities; using UnityEngine; //[GenerateAu…...
hnust 湖南科技大学 2022 软件测试报告+代码
hnust 湖南科技大学 2022 软件测试报告代码 内容 BMI junit单元测试决策表划分方法测试三角形判断问题文档修改问题之因果图实验逻辑覆盖测试技术实验(白盒测试)selenium 功能自动化测试Jmeter 性能自动化测试 下载地址 https://pan.baidu.com/s/19e…...

【面试笔记】单片机软件工程师,工业控制方向(储能)
文章目录 1. 基础知识1.1 C语言笔试题1.1.1 用宏定义得到一个数组所含的元素个数1.1.2 定义函数指针从程序固定地址(0)开始执行1.1.3 volatile的含义及作用1.1.4 32位系统,整数7和-7,分别以大端和小端存储,请示意说明 1.2 嵌入式基础1.2.1 简…...

基于springboot实现小区团购管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现小区团购管理系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装小区团购管理软件来…...

基于django | 创建数据库,实现增、删、查的功能
1、在cmd中,输入指令进入mysql终端: mysql -u 用户名 -p 2、输入mysql的密码 3、输入指令,显示出所有的数据库 show databases; 4、输入指令创建表: create table 表名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 5、use …...

数据结构与算法07-图
介绍 图是一种善于处理关系型数据的数据结构,使用它可以很轻松地表示数据之间是如何关联的。 图的实现形式有很多,最简单的方法之一就是用散列表。 friends { "Alice" > ["Bob", "Diana", "Fred"], &quo…...

springboot项目部署需要redis集群问题
本来直接将redis为单独启动模式转为配置 yml文件 spring.redis.cluster.nodes: 192.168.12.78:8001,192.168.12.78:8002,192.168.12.78:8003, java文件 package io.sirc.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.ann…...

JVMの内存泄漏内存溢出案例分析
1、内存溢出 内存溢出指的是程序在申请内存时,没有足够的内存可供分配,导致无法满足程序的内存需求,常见的内存溢出情况包括堆内存溢出(Heap Overflow)和栈溢出(Stack Overflow): …...

v31支架固定方式
CK_Label_v31 夹子固定方式 底座粘贴固定方式...
Jenkins从入门到精通面试题及参考答案(3万字长文)
目录 什么是Jenkins? Jenkins是如何工作的? Jenkins与持续集成(CI)有什么关系?...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...