Python - with语句 - 写一个支持with方法调用的类

Python - with语句 - 写一个支持with方法调用的类

前言

使用语句with open('a.txt', 'r') as f:可以自动关闭文件句柄,使用语句with torcu.no_grad()可以不计算梯度。

我学Py的时候咋好像没学过openno_grad是怎么实现的?

于是今日了解了一下。

实现一个my_with,计算语句执行用时

其实不难,写一个类,写两个函数__enter__(with代码块被调用之前执行)、__exit__(结束时候执行)。然后就可以了。

import timeclass time_counter:    def __enter__(self):self.start = time.time()def __exit__(self, exc_type, exc_value, traceback):self.end = time.time()print(f"time consume: {self.end - self.start}s")with time_counter():for i in range(int(1e7)):i += 1

运行结果:

time consume: 0.7823185920715332s

那“as”语句呢?

只需要给__enter__函数加个返回值:

import timeclass time_counter:    def __enter__(self) -> int:self.start = time.time()return 1def __exit__(self, exc_type, exc_value, traceback):self.end = time.time()print(f"time consume: {self.end - self.start}s")with time_counter() as a:print(a)for i in range(int(1e7)):i += 1

运行结果:

1
time consume: 0.7726781368255615s

关于__exit__函数的三个参数:

  • exc_type:异常的类型,如果with块中没有异常发生,则为None
  • exc_value:异常的值,即Exception的实例,如果没有异常发生,则为None
  • traceback:一个traceback对象,它封装了异常的调用栈信息,如果没有异常发生,则为None

End

官方文档:https://docs.python.org/3/reference/compound_stmts.html#with

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/138576722

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

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

相关文章

【声呐仿真】学习记录2-运行ROV(带camera、sonar、dvl等传感器)例程

【声呐仿真】学习记录2-运行ROV(带camera、sonar、dvl等传感器)例程 前言第一阶段-学习Gazebo第二阶段-学习URDF、xacro第三阶段-寻找例程跑一个rexrov示例程序1.uuvsimulator quick_start2.能键盘控制的示例程序(失败)3.能键盘控…

Windows安装MySQL 8.4.0免安装版

下载地址:MySQL :: Begin Your Download 1 管理员权限打开cmd,切换到MySQL安装路径的bin目录下 cmd> C: cmd> cd ..\mysql-8.4.0-winx64\bin 2 移除已安装的MySQL服务(若有) 2.1 停止老的MySQL服务 net stop mysql …

Excel如何设置密码保护【图文详情】

文章目录 前言一、Excel如何设置密码保护?二、Excel如何取消密码保护?总结 前言 在软件项目开发过程中,会输出很多技术文档,其中也包括保密级别很高的服务器账号Excel文档。为了确保服务器账号相关的Excel文档的安全性&#xff0…

CSS 网格布局一行X个排列

<div class"icon-box"><divv-for"(item,index) in icon" :key"index" class"icon"style"cursor: pointer">{{item}}</div></div>.icon-box{display: grid; /**网格布局*/grid-template-columns: r…

NSS题目练习2

[LitCTF 2023]我Flag呢&#xff1f; 打开题目后查看源码即可发现flag [第五空间 2021]WebFTP 看到提示&#xff0c;首先想到用dirsearch扫描链接&#xff0c;看是否存在git泄露 发现存在git泄露&#xff0c;用githack解决 克隆提示目录为空&#xff0c;说明不正确&#xff0c…

容器监控与日志管理

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Docker监控工具 二、容器日志工具docker logs 三、第三方日志工具 四、容器日志驱动 五、示例 5.1、查看容器中运行的进程的信息 5.2、查看…

液晶显示模块强光实验类目及太阳光模拟器

科技日新月异&#xff0c;液晶显示模块运用得也越来越广泛&#xff0c;用户在购买和使用时&#xff0c;都希望能买到显示效果好&#xff0c;性价比高的产品。本文主要介绍LCM&#xff0f;LED模块在光学方面主要测试项目类别及实验仪器。 测试项目类别 1. 透过率 透过率是指透…

【DRAM存储器二十九】DDR4介绍-DDR4 SDRAM的主要技术特性之Connectivity test mode

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《镁光DDR4数据手册》 、《JESD79-4B》 目录 Connectivity test mode

Docker和containerd服务配置国内源

containerd配置国内源 在文件中添加&#xff1a; # /etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"] endpoint ["registry.aliyuncs.com/google_containers"]docker配置国内源 在文件中添…

C# 实现加减乘除 (备忘)

请给出 计算表达式 (45.0)/ 4.2 * (35.3) using System; using System.Collections.Generic;public class ExpressionEvaluator {public static double Evaluate(string expression){var operands new Stack<double>();var operators new Stack<char>();for (in…

英语学习笔记7——Are you a teacher?

Are you a teacher? 你是教师吗&#xff1f; 词汇 Vocabulary name /neɪm/ n. 名字&#xff0c;名声 英文名字构成&#xff1a; 名 字 姓      given name family name  也叫做&#xff1a;first name last name      例&#xff1a;Yanyan Gao 例句&#xff1…

学习网络安全现在还有前景吗?行业分析报告

如果你现阶段选择入行网络安全&#xff0c;就相当于10年前学IT&#xff0c;当它发展起来的时候&#xff0c;你刚好遇到行业红利期。 网络安全这个职业完全可以改变很多人的人生轨迹。 因为它是个不需要你有多强大的情商&#xff0c;不需要你去学习更多复杂的职场和人际关系技…

halcon获取Licenses--每月一换

转到https://www.51halcon.com/ 点击授权&#xff0c;根据你的版本选择progress或者steady进行下载 记住每月一换哦

2024年小程序视频如何下载到电脑上

随着2024年的到来&#xff0c;将小程序视频无缝下载到电脑上&#xff0c;从此让精彩内容触手可及&#xff0c;不受时间和网络的限制&#xff0c;随时随地启发你的生活和工作。 小程序视频我已经打包好了&#xff0c;有需要的自己下载 小程序视频下载工具打包链接&#xff1a;…

AI数据中心网络技术选型,InfiniBand与RoCE对比分析

InfiniBand与RoCE对比分析&#xff1a;AI数据中心网络选择指南 随着 AI 技术的蓬勃发展&#xff0c;其对数据中心网络的要求也日益严苛。低延迟、高吞吐量的网络对于处理复杂的数据密集型工作负载至关重要。本文分析了 InfiniBand 和 RoCE 两种数据中心网络技术&#xff0c;帮助…

Docker安装oralce

Docker安装oralce 1.部署Oracle 11G企业版环境&#xff08;11.2.0.4) # 1.前提是安装好docker# 2.拉取镜像(该镜像是我修改过的&#xff0c;可以直接使用) [rootapi-new local]# docker pull xingyuyu123/oracle:oracle11204 oracle11204: Pulling from xingyuyu123/oracle 5…

【linux软件基础知识】- 文件的概念:Linux 中的文件

Linux 中的文件 在 Linux 中,文件是存储在存储设备(例如硬盘驱动器或固态驱动器)上的数据项的集合。 文件被组织为字节序列,并由文件系统中的唯一名称来标识。 以下是 Linux 中文件的一些关键特征: 字节序列:Linux 中的文件被视为字节序列。 每个字节可以表示一个字符…

付费文章合集第二期

☞☞付费文章合集第一期 感谢大家一年来的陪伴与支持&#xff01; 对于感兴趣的文章点标题能跳转原文阅读啦~~ 21、Matlab信号处理——基于LSB和DCB音频水印嵌入提取算法 22、CV小目标识别——AITOD数据集&#xff08;已处理&#xff09; 23、Matlab信号发生器——三角波、…

【Redis】Redis 事务

Redis 的事务的本质是一组命令的批处理。这组命令在执行过程中会被顺序地、一次性 全部执行完毕&#xff0c;只要没有出现语法错误&#xff0c;这组命令在执行期间不会被中断 1.事务特性 仅保证了数据的一致性 这组命令中的某些命令的执行失败不会影响其它命令的执行&#xff…

【JVM】ASM开发

认识ASM ASM是一个Java字节码操纵框架&#xff0c;它能被用来动态生成类或者增强既有类的功能。 ASM可以直接产生二进制class文件&#xff0c;也可以在类被加载入虚拟机之前动态改变类行为&#xff0c;ASM从类文件中读入信息后能够改变类行为&#xff0c;分析类信息&#xff…