【Python系列】Python装饰器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 1.装饰器的概念
    • 2.装饰器的构成
    • 3.装饰器的语法
    • 4.带参数的装饰器
    • 5.装饰器的应用场景
    • 6.示例:日志记录装饰器
    • 7.装饰器的高级用法
    • 8.结论

装饰器(Decorator)是 Python 中一种非常强大的功能,它允许程序员在不修改原始函数代码的前提下,增加函数的新功能。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个经过包装的函数,从而增强原有函数的功能。
在这里插入图片描述

1.装饰器的概念

在 Python 中,装饰器通常用@符号来表示,它位于函数定义之前。装饰器可以看作是一种设计模式,它遵循开放-封闭原则,即软件实体应该对扩展开放,对修改封闭。装饰器允许你通过增加新的功能来扩展函数,而不需要修改函数本身的代码。

2.装饰器的构成

一个装饰器通常包含以下三部分:

  1. 接收函数的函数:这是装饰器本身,它接收一个函数作为参数。
  2. 包装函数:这是装饰器内部定义的函数,它会调用接收到的函数,并可以添加额外的功能。
  3. 返回包装函数:装饰器执行完毕后,需要返回一个函数,通常是包装函数。

3.装饰器的语法

装饰器的基本语法如下:

def decorator_function(original_function):def wrapper_function(*args, **kwargs):# 在这里添加额外的功能result = original_function(*args, **kwargs)# 在这里添加额外的功能return resultreturn wrapper_function@decorator_function
def original_function(*args, **kwargs):# 函数的原始功能pass

4.带参数的装饰器

有时候,我们希望装饰器本身也能接收参数,这就需要使用到闭包。带参数的装饰器语法如下:

def decorator_function_with_args(arg1, arg2):def decorator(original_function):def wrapper(*args, **kwargs):# 使用装饰器参数print(arg1, arg2)result = original_function(*args, **kwargs)return resultreturn wrapperreturn decorator@decorator_function_with_args('arg1_value', 'arg2_value')
def original_function():pass

5.装饰器的应用场景

装饰器可以用于多种场景,包括但不限于:

  1. 日志记录:在函数执行前后添加日志记录。
  2. 性能测试:测量函数执行时间。
  3. 事务处理:确保数据库操作的原子性。
  4. 缓存:缓存函数的返回结果,避免重复计算。
  5. 权限校验:检查用户是否有执行函数的权限。
  6. 请求限流:限制函数在一定时间内的调用次数。

6.示例:日志记录装饰器

下面是一个简单的日志记录装饰器示例:

import functools
import timedef log_decorator(func):@functools.wraps(func)def wrapper(*args, **kwargs):print(f"Calling {func.__name__}")start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"{func.__name__} executed in {end_time - start_time:.2f} seconds")return resultreturn wrapper@log_decorator
def add(a, b):time.sleep(1)  # 模拟耗时操作return a + bresult = add(5, 3)

7.装饰器的高级用法

除了基本用法,装饰器还可以用于类和类方法,甚至可以嵌套使用。此外,Python 标准库中的functools.wraps装饰器可以用来保留原函数的元数据,如函数名、文档字符串等。
在这里插入图片描述

8.结论

装饰器是 Python 中一个非常强大的工具,它提供了一种灵活、优雅的方式来增强函数的功能。通过使用装饰器,我们可以编写更加模块化、可重用的代码,同时保持代码的清晰和简洁。掌握装饰器的使用,对于提高 Python 编程技能和编写高质量代码具有重要意义。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

【数据结构】图论中求最短路径——迪杰斯特拉算法(Dijkstra)、弗洛伊德算法(Floyd)

目录 最短路径 (*)迪杰斯特拉算法(Dijkstra)迪杰斯特拉算法(Dijkstra)的算法原理: 弗洛伊德算法(Floyd)弗洛伊德算法(Floyd)的算法原理:弗洛伊德算法的&#…

哪种价格行为指标对投资者有用?AnzoCapital昂首资本总结6个特征

各位投资者都知道价格行为指标对于交易极具助益,无论是初学者还是专业交易员都能运用。构建外汇交易系统时,这类指标堪称核心且必不可少的工具。 但不是所有的价格行为指标都对投资者有用的,哪种价格行为指标才是对投资者有用的,都…

CogVLM2多模态开源大模型部署与使用

CogVLM2多模态开源大模型部署与使用 项目简介 CogVLM2 是由清华大学团队发布的新一代开源模型系列。2024年5月24日,发布了Int4版本模型,只需16GB显存即可进行推理。2024年5月20日,发布了基于llama3-8b的CogVLM2,性能与GPT-4V相当…

论文AI率过高?掌握这四种技巧轻松降重

随着人工智能技术的突飞猛进,AI生成内容(AIGC)已被广泛用于学术论文撰写中,提高效率同时也带来了原创性的挑战。面对日益严格的学术审查,一个突出的问题是:使用AI代写的论文能否通过内容检测?因…

Linux 搭建 ZeroTier 的 Moon 服务器

系统:centos 7.6 轻量云服务器:腾讯云 Moon是什么,为什么需要Moon? ZeroTier通过自己的多个根服务器帮助我们建立虚拟的局域网,让虚拟局域网内的各台设备可以打洞直连。这些根服务器的功能有些类似于通过域名查询找到…

SpringCloud Hystrix服务熔断实例总结

SpringCloud Hystrix断路器-服务熔断与降级和HystrixDashboard SpringCloud Hystrix服务降级实例总结 【1】服务熔断 熔断机制概述 熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级&…

WWDC 2024前瞻:苹果如何用AI技术重塑iOS 18和Siri

苹果下周的全球开发者大会有望成为这家 iPhone 制造商历史上的关键时刻。在 WWDC 上,这家库比蒂诺科技巨头将展示如何选择将人工智能技术集成到其设备和软件中,包括通过与 OpenAI 的历史性合作伙伴关系。随着重大事件的临近,有关 iOS 18 及其…

AI大模型时代必须关注的数据库 DuckDB1.0 正式发布

开源数据库DuckDB1.0 经过内部6年的打磨,积累了30万行代码,1.8万star,2024.06.03号正式发布了1.0版本(代号 Snow Duck)。 我们新一代程序员,没能见证MySQL 1.0、PostgreSQL 1.0、Windows 1.0、Linux 1.0、…

flinksql 回撤流中主键发生变更的影响(group by中的值发生改变)

flinksql 回撤流中,主键发生变更的影响 1 什么是回撤流2 主键变更场景2.2 实践发生3 实践中发现的比较好的的实时数仓架构1 什么是回撤流 这篇文章主要谈论一个场景,简单来说: 首先我们来简单的说一下什么是回撤流,以及回撤流的底层原理,举个例子: 这个说的不是很清晰…

【吊打面试官系列】MySQL 中有哪几种锁?

大家好,我是锋哥。今天分享关于 【MySQL 中有哪几种锁?】面试题,希望对大家有帮助; MySQL 中有哪几种锁? 1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,…

TypeScript学习(一):开发环境搭建

官方文档搭建参考 https://learn.microsoft.com/zh-cn/training/modules/typescript-get-started/ 1.下载node.js https://nodejs.org/en/download 2.下载vscode https://code.visualstudio.com/ 3.在线ts的测试工具 https://www.typescriptlang.org/play/ 4.下载typescr…

H5即时通讯群聊源码无限建群创群/H5聊天系统聊天网站源码/H5语音聊天系统

源码介绍 支持自助建群 管理群 修改群资料支持自动登录 登陆成功可自助修改资料后台可查看群组聊天消息记录支持表情 动态表情 图片发布支持消息语音提醒

docker-compose教程

1. docker-compose是什么? 1. 1 简介 compose、machine 和 swarm 是docker 原生提供的三大编排工具。 简称docker三剑客。Compose 项目是 Docker 官方的开源项目,定义和运行多个 Docker 容器的应用(Defining and running multi-container Do…

月入30000的软件测试人员,简历是什么样子的?

我们都知道,简历是一个人进入职场的敲门砖。从某种层面来说,简历也像一个人的具象身份证,或者专业资格证。所以,一份简历的好坏,不仅关乎个人的“脸面”,更关乎你是不是一个有“含金量”的技术人员。 所以…

SVG画双色虚线并带有流动效果

实现效果 HTML代码 <svg xmlns"http://www.w3.org/2000/svg" viewBox"0 0 100 100" version"1.1"><polyline points"10,20 10,40 80,40 80,60" stroke-width"2" stroke-dasharray"10 10" fill"non…

C语言数据结构排序、插入排序、希尔排序(多组并排、一组排完排另一组)、选择排序、堆排序、冒泡排序等的介绍

文章目录 前言打印数组函数一、插入排序二、希尔排序三、选择排序四、堆排序五、冒泡排序总结 前言 C语言数据结构排序、插入排序、希尔排序&#xff08;多组并排、一组排完排另一组&#xff09;、选择排序、堆排序、冒泡排序等的介绍 打印数组函数 打印数组函数定义 // 打印…

如何以定投策略投资场外个股期权?

场外个股期权为投资者提供了一种灵活且富有潜力的投资工具。与传统的投资方式不同&#xff0c;场外个股期权以其低门槛、高灵活性和潜在的较高回报吸引了众多投资者。对于希望长期稳健增值的投资者来说&#xff0c;利用定投策略来投资场外个股期权是一个值得考虑的选项。 文章…

什么样的男士内裤比较好?按这个方法选男士内裤不会出错!

男士内裤作为日常穿着的重要服饰&#xff0c;其舒适度与卫生性对男士们的健康至关重要。随着时代的变迁&#xff0c;男士内裤的款式与材质也日益丰富多样&#xff0c;为男士们提供了更多选择。 目前市场上&#xff0c;男士内裤主要分为三角、平角和四角三大类别。其中&#xf…

结构体+结构体内存对齐+结构体实现位段

结构体内存对齐实现位段 一.结构体1.结构体的声明2.结构体变量成员访问操作符3.结构体传参4.匿名结构体5.结构的自引用 二.结构体内存对齐1.对齐规则2.为什么存在内存对齐&#xff1f;3.修改默认对齐数 三.结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段…

帮助客服高效工作的快捷回复软件

在繁忙的客服工作中&#xff0c;对于客服团队来说&#xff0c;每天面对大量的客户咨询&#xff0c;如何快速、准确地回应每一位客户的需求&#xff0c;成为了他们日常工作中的一大挑战。而快捷回复软件的出现&#xff0c;无疑是客服人员的福音。今天&#xff0c;我要向大家介绍…