1分钟带你学会使用装饰器编写Python函数

news2024/10/2 20:34:10

图片

1.需求

  • 向 test() 函数中,新增一个功能,多输出一句话"给他补铁"

def test():
    print("水中放吸铁石")
# test()



# 第一种方式:重写函数
def test():
    print("水中放吸铁石")
    print("给他补铁")
test()



# 第二种方式:函数嵌套函数
def test1():
    test()
    print("给他补铁")
test1()

2.装饰器

  • 在代码运行期间,可以动态的给原函数新增功能,被称为装饰器(使用闭包函数实现)

  • 使用装饰器的好处:在团队开发中,假如两个或两个以上的同时使用了相同的功能,但是功能上面有一些细微的差别,这时候可以使用装饰器的方式进行调整,互相不影响,代码简化

  • 普通装饰器函数的方式

def test():
    print("水中放吸铁石")
    
def outer(fn):    # fn表示形参,调用的时候实参会替换形参
    def inner():
        fn()    # 调用原函数
        print("给他补铁")    # 新增的功能
    return inner

# 普通装饰器函数的方式:
test = outer(test)    # 参数test是函数名
test()
  • 简写方式:在使用简写方式的时候,原函数必须写在装饰器的下面

def outer(fn):    # fn表示形参,调用的时候实参会替换形参
    def inner():
        fn()    # 调用原函数
        print("给他补铁")    # 新增的功能
    return inner

@outer
def test():
    print("水中放吸铁石")
test()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM-v7 程序计数器PC的相关指令与应用

1. 前言 如图1所示,R14是连接寄存器(Link Register),在汇编指令中通常也写为LR,用于存储函数调用和异常等的返回信息,复位时,默认值为0xFFFFFFFF; 图1 Core register R15是程序计数…

从 iPhone 设备恢复误删微信消息的 4 种方法

您的微信消息可能会因无意删除、系统崩溃、卸载微信应用或升级过程失败而被删除。如果您遇到这种情况,您不必担心,因为您可以采取某些步骤来恢复丢失的微信历史记录。这里有 4 种方法可以帮助您从 iPhone恢复丢失的微信消息、群聊历史记录或微信联系人。…

函数柯里化:JavaScript中的高级技巧

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【脚本玩漆黑的魅影】全自动刷努力值

文章目录 原理全部代码 原理 全自动练级,只不过把回城治疗改成吃红苹果。 吃一个可以打十下,背包留10个基本就练满了。 吃完会自动停止。 if img.getpixel(data_attack[0]) data_attack[1] or img.getpixel(data_attack_2[0]) data_attack_2[1]: # …

Solidity Uniswap V2 价格预言机

预言机是连接区块链与链下服务的桥梁,这样就可以从智能合约中查询现实世界的数据。Chainlink 是最大的oracle网络之一,创建于 2017 年,如今已成为许多 DeFi 应用的重要组成部分。https://github.com/XuHugo/solidityproject Uniswap 虽然是链…

matlab双目相机标定-需要什么参数、怎么获得

相机标定目的:获得相机内参、外参、畸变系数,摄像头的内参(f,1/dx,1/dy,cx,cy)、畸变参数(k1,k2,k3,p1,p1)和外参(R,t),用于接下来的双目校正和深度图生成从而实现二维到三维的转换。 相机标定方法:opencv 双目相机标定以及立体…

Objects类 --java学习笔记

Objects类 Objects是一个工具类,提供了很多操作对象的静态方法给我们使用 Objects类常用的三个方法 Objects.equals 比直接equals更安全,因为Objects.equals里面做了非空校验 Objects.isNull(A) 等价于 A null Objects.non…

docker部署在线聊天室平台Fiora

Fiora 是一款开源免费的在线聊天系统 https://github.com/yinxin630/fiora 部署 创建docker网络 docker network create fiora-networkdocker-compose部署 vim docker-compose.yml version: 3 services:fiora_redis:image: rediscontainer_name: fiora_redisrestart: alway…

Springboot+vue的医院药品管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的医院药品管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#xff09…

AWS的CISO:GenAI只是一个工具,不是万能钥匙

根据CrowdStrike的年度全球威胁报告,尽管研究人员预计人工智能将放大对防御者和攻击者的影响,但威胁参与者在其行动中使用人工智能的程度有限。该公司上个月在报告中表示:“在整个2023年,很少观察到GenAI支持恶意计算机网络运营的开发和/或执行。” 对于GenAI在网络安全中的…

关于天线综合3(傅里叶变换法)

傅里叶变换法 如果令fd(w)为期望方向图,那么对应的电流分布id(s)为 但是,通常它的范围是无穷大的,所以我们通过近似解来截断id(s)如下 根据傅里叶变化,电流就会产生一个近似方向图f(w)。扩展至整个s域的电流id(s)产生准确的方向图…

CentOS 7.6安装部署Seafile服务器

今天飞飞和你们分享CentOS 7.6上安装基于MySQL/MariaDB的Seafile服务器的方法,包括下载和安装7.0.5版本、配置数据库、启动服务器等步骤。安装成功后,需要通过nginx反向代理才能访问seafile服务。 通过预编译好的安装包来安装并运行基于 MySQL/MariaDB …

【网站项目】109网上手机商城

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【NR 定位】3GPP NR Positioning 5G定位标准解读(七)- GNSS定位方法

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

L2-2 老板的作息表(Python)

作者 陈越 单位 浙江大学 新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了? 本题就请你编写程序,检查任意一张时间表&#xff0c…

excel中去除公式,仅保留值

1.单个单元格去除公式 双击单元格,按F9. 2.批量去除公式 选中列然后复制,选择性粘贴,选值粘贴

边缘计算平台EdgeGallery前端源码分析03-应用测试认证平台

1 首页 &#xff08;1&#xff09;Nav导航栏 代码路径 atp\atp-fe\src\components\layout\Nav.vue &#xff08;2&#xff09;Banner图片区域 代码路径 atp\atp-fe\src\pages\home\Home.vue 点击详情跳转到 测试用例管理 页面&#xff08;后面分析&#xff09; <div cl…

交易平台开发:构建安全/高效/用户友好的在线交易生态圈

在数字化浪潮的推动下&#xff0c;农产品现货大宗商品撮合交易平台已成为连接全球买家与卖家的核心枢纽。随着电子商务的飞速发展&#xff0c;一个安全、高效、用户友好的交易平台对于促进交易、提升用户体验和增加用户黏性至关重要。本文将深入探讨交易平台开发的关键要素&…

ARM中多寄存内存访问概念和栈的种类和应用

多寄存器内存访问指令 多寄存器内存访问指令 MOV R1,#1 MOV R2,#2 MOV R3,#3 MOV R4,#4 MOV R11,#0x40000020 STM R11,{R1-R4} 将R1-R4寄存器中的数据存储到内存以R11为起始地址的内存中 LDM R11,{R6-R9} 将内存中以R11为起始地址的数据读取到R6-R9寄存器中 当寄存器…

一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题

这种错误的产生原因&#xff1a; 运行程序退出不是按正常流退出&#xff0c;是按窗口右上角的 “X” 来关闭程序&#xff0c;但是后台的xxx.exe控制台程序还在运行&#xff1b;修改程序的代码后再运行&#xff0c;就会报LNK1168的错误&#xff1b; 报错示例&#xff1a; 解决方…