Python 装饰器的理解

装饰器是一个特殊的函数,它接受一个函数作为参数,并返回一个新的函数。

通过使用装饰器,可以在不修改原始函数代码的情况下扩展其功能,增加代码的灵活性和可维护性

装饰器在定义之后立即跟在需要被装饰的函数的定义之前,使用@符号。

  1. 目的:装饰函数,既修改或增强函数的行为
  2. 作用对象:函数
  3. 调用方式:自动应用于目标函数,不需要直接调用
def greet(name):  print(f"Hello, {name}!")# 使用装饰器来增强这个函数的行为,添加一个计时功能:
import time  def timing_decorator(func):  def wrapper(*args, **kwargs):  start_time = time.time()  result = func(*args, **kwargs)  end_time = time.time()  print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")  return result  return wrapper  # 使用装饰器  
@timing_decorator  
def greet(name):  time.sleep(1)  # 假设这个函数需要一些时间来完成  print(f"Hello, {name}!")  # 调用greet函数  
greet("Alice")

输出为:

Hello, Alice!  
Function greet took 1.00xxxx seconds to execute.

Function greet took这行代码是装饰器timing_decoratorwrapper函数打印的,用于显示函数greet的执行时间。

首先,greet函数内部的time.sleep(1)会让程序暂停1秒来模拟函数执行需要一些时间。

然后,wrapper函数计算了函数执行前后的时间差,并打印出来。

最后,wrapper函数返回了greet函数的执行结果,即打印"Hello, Alice!"。

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

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

相关文章

Vivado -RAM

ip_ram 定义了一个名为ip_ram的模块,该模块具有以下端口: sys_clk:系统时钟输入。 sys_rst_n:系统复位输入。 module ip_ram( input sys_clk, input sys_rst_n);wire ram_en ; wire ram_wea …

c++设计模式之代理模式

作用 代理模式主要用于,通过代理类,来控制实际对象的访问权限 案例 class VideoSite { public:virtual void freeVideo()0;virtual void vipVideo()0;virtual void trickVideo()0; };class FixBugVideoSite:public VideoSite { public:void freeVideo()…

LCP 30. 魔塔游戏 - 力扣(LeetCode)

题目描述 小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造成伤害值,即血量减…

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有…

【MySQL】-11 MySQL索引与索引类型

MySQL索引与索引类型 MySQL索引MySQL索引类型包括:(1)普通索引创建方式:创建索引修改表结构创建表的时候直接指定 (2)唯一索引创建方式:创建索引修改表结构创建表的时候直接指定 (4)…

Docker安装及介绍

一、Docker的介绍 1.1、什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实…

Unity引擎学习笔记之【动画层操作】

动画层Animation Layer 一、动画器的三个基本状态 1. Any State(任意状态) “Any State”(任意状态):这个状态可以用来连接多个状态机的任意状态转换。在动画控制器中,你可以使用“Any State”作为过渡条…

Python基础语法(内置Python, pycharm配置方式)

一.工具安装与配置 1.Python解释器的安装 官网网址:https://www.python.org/ 选择downloads即可(Windows用户点击Windows, 苹果用户点击macOS) 找到最新版本, 并选择 Download Windows installer (64-bit) 下载完成后可在得到一个安装包进行安装(安装时间较长) 安装完成后…

NLP_“预训练+微调大模型”模式和Prompt/Instruct模式的异同

文章目录 “预训练微调大模型”的模式以提示/指令模式直接使用大模型“预训练微调大模型”模式和Prompt/Instruct模式的异同小结 “预训练微调大模型”的模式 经过预训练的大模型所习得的语义信息和所蕴含的语言知识,很容易向下游任务迁移。NLP应用人员可以根据自己…

Java中处理I/O操作的不同方式:BIO,NIO,AIO

Java中处理I/O操作的不同方式:BIO,NIO,AIO 亲爱的朋友, 在这美好的时刻,愿你感受到生活的温暖和欢乐。愿你的每一天都充满着笑容和满足,无论面对什么挑战都能勇往直前,化解困境。 希望你的心中充…

初识C语言·预处理详解

目录 1 预定义符号 2 define定义常量 3 #define定义宏 4 带有副作用的宏 5 宏替换的规则 6 宏和函数的对比 7 # 和 ## i) #运算符 ii) ##运算符 8 命名约定 9 命令行定义 10 条件编译 条件编译1: 条件编译2: 条件编译3: 条件…

昆仑万维发布天工 2.0 大语言模型及AI助手App;AI成功破解2000年前碳化古卷轴

🦉 AI新闻 🚀 昆仑万维发布天工 2.0 大语言模型及AI助手App 摘要:昆仑万维近日推出了新版MoE大语言模型“天工 2.0”和相应的“天工 AI 智能助手”App,宣称为国内首个面向C端用户免费的基于MoE架构的千亿级参数大模型应用。天工…

每天一个数据分析题(一百五十六)

在数据建模过程中,对于变量的筛选与维度归约,以下哪项描述是正确的? A. 主成分分析适用于可解释性较强的预测模型,因为它减少了变量间的相关性。 B. 变量聚类旨在通过保留所有变量来减少信息损失,适合于所有类型的数…

【力扣 - 时间复杂度和空间复杂度】

力扣刷题时,题目要求里经常有时间复杂度和空间复杂度的要求。那么,什么是时间复杂度和空间复杂度呢? 定义 时间复杂度和空间复杂度都是用于衡量算法性能的指标,但它们分别从不同的角度来评估算法的效率。 时间复杂度&#xff1a…

UE4 C++创建摄像机摇臂和相机并且设置Transform

新建MyPawn C类 .h #include "GameFramework/SpringArmComponent.h" //SpringArm组件 #include "Camera/CameraComponent.h" //Camera组件class 工程名称_API AMyPawn : public APawn { //定义组件变量 public:UPROPERTY(VisibleAnywhere, BlueprintRead…

Android:IntentActivity,Service,BroadcastReceiver

3.14 Android三大组件 1、Intent页面跳转 Intent(意图):将要做某一件事。Android的3大组件:Activity、Service、BroadcastReceiver,通过Intent启动,并且Intent可以携带数据。 Intent类方法setComponent()设置组件; setClass(packageContext,cls)设置类、 setActi…

CGAL::2D Arrangements-8

8.拓扑Traits 拓扑特征类封装了Arrangement_on_surface_2<GeometryTraits_2&#xff0c;TopologyTraits>类模板和外围模块使用的拓扑实体的定义和处理这些拓扑实体的函数的实现。每个拓扑特征类都必须对基本概念ArrangementBasicTopologyTraits进行建模。这一基本概念的…

C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码

一、莱文斯坦&#xff08;Levenshtein&#xff09; Vladimir I. Levenshtein 弗拉基米尔I列文施坦博士是纠错码理论的先驱&#xff0c;被称为俄罗斯编码理论之父。Levenshtein是莫斯科俄罗斯科学院Keldysh应用数学研究所的研究教授&#xff0c;他的贡献体现在消费者的日常生活中…

PyTorch中torchvision库的详细介绍

torchvision 是 PyTorch 生态系统中的一个关键库&#xff0c;专门为计算机视觉任务设计和优化。它提供了以下几个核心功能&#xff1a; 数据集&#xff1a;内置了多种广泛使用的图像和视频数据集&#xff0c;如 MNIST、CIFAR10/100、Fashion-MNIST、ImageNet、COCO 等&#xff…

Linux中的numactl命令指南

假设我们想控制线程如何被分配到处理器核心&#xff0c;或者选择我们想分配数据的位置&#xff0c;那么numactl命令就适合此类任务。在这篇文章中&#xff0c;我们讨论了如何使用numactl命令执行此类操作。 目录&#xff1a; 介绍语法命令总结参考文献 简介 现代处理器采用…