python中with的用法_python 中 with的用法

with 语句使用于对资源进行访问的场合,确保不管使用过程是否发生异常都会执行必要的"清理"操作,释放资源,比如文件使用后自动关闭/线程中锁的自动获取和释放

with open("1.txt") as file:

data = file.read()

使用with,能够减少冗长,还能自动处理上下文环境产生的异常

with 工作原理

(1)紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量;

(2)当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

with工作原理代码示例:

class Sample:

def __enter__(self):

print("进入 with")

return self

def __exit__(self, exc_type, exc_val, exc_tb):

print("退出 with")

def xxx(self):

print('读取文件')

with Sample() as sample:

print("__enter__的返回值: ", sample)

sample.xxx()

结果

进入 with

__enter__的返回值: <__main__.sample object at>

读取文件

退出 with

可以看到,整个运行过程如下:

(1)__enter__()方法被执行;

(2)__enter__()方法的返回值,在这个例子中是self,赋值给变量sample;

(3)执行代码块,__enter__的返回值: <__main__.sample object at>;

( 4 )执行方法 xxx()

( 5 )__exit__()方法被调用;

【注:】exit()方法中有3个参数, exc_type, exc_val, exc_tb,这些参数在异常处理中相当有用。

exc_type: 错误的类型

exc_val: 错误类型对应的值

exc_tb: 代码中错误发生的位置

总结

实际上,在with后面的代码块抛出异常时,exit()方法被执行。开发库时,清理资源,关闭文件等操作,都可以放在exit()方法中。

总之,with-as表达式极大的简化了每次写finally的工作,这对代码的优雅性是有极大帮助的。

如果有多项,可以这样写:

With open('1.txt') as f1, open('2.txt') as f2:

do something

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

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

相关文章

半导体行业深度报告:从应用到行业的全面复苏

来源&#xff1a;国金证券一、2020-2021年全球半导体市场投资展望多种因素导致全球半导体市场于 2019 年同比下跌近 13%到 4,102 亿美元&#xff0c;而存储器行业同比下跌超过 30%&#xff0c;逻辑半导体同比下跌近 2%。存储器市场占全球半导体市场达到近三年低点的 27%。但受惠…

ES6精华: 解构运算符 扩展运算符 剩余运算符

http://www.tuicool.com/articles/26bAzmm转载于:https://www.cnblogs.com/xuezizhenchengxuyuan/p/6378382.html

mysql 8 修改root密码忘记_忘记mysql8或者mariadb5及以上 的root密码如何更改

实验环境操作系统&#xff1a;lsb_release -aNo LSB modules are available.Distributor ID:UbuntuDescription:Ubuntu 20.04.1 LTSRelease:20.04Codename:focalmysql数据库版本&#xff1a;mysql基本信息具体步骤1. 停止mysql (sudo service mysqld stop 或者 kill -TERM mysq…

配置tomcat_Tomcat 配置必备的 10 个小技巧,让你轻松玩转Tomcat

现在开发Java Web应用&#xff0c;建立和部署Web内容是一件很简单的工作。使用Jakarta Tomcat作为Servlet和JSP容器的人已经遍及全世界。Tomcat具有免费、跨平台等诸多特性&#xff0c;并且更新得很快&#xff0c;现在非常的流行。你所需要做的就是&#xff1a;按照你的需求配置…

卫星移动通信现状与未来发展

来源&#xff1a;电子万花筒摘要&#xff1a;卫星移动通信系统具有覆盖范围广&#xff0c;对地面情况不敏感等优势&#xff0c;已经成为地面移动通信领域重要的组成部分&#xff0c;尤其是在空中、海洋、荒漠戈壁等地面无线网络难以覆盖的地方。随着科学技术的不断进步&#xf…

【SpringCloud】Netflix源码解析之Ribbon:负载均衡策略的定义和实现

Ribbon负载均衡策略定义 IRule其实就只做了一件事情Server choose(Object key)&#xff0c;可以看到这个功能是在LB中定义&#xff08;要求&#xff09;的&#xff0c;LB把这个功能委托给IRule来实现。不同的IRule可以向LB提供不同的负载均衡算法。 public interface IRule{ pu…

mysql load data infile 重写_mysql load data infile 命令的数据导入

文章介绍了mysql load data infile 命令的数据导入&#xff0c;该方式比直接的insert的效率要高&#xff0c;按照官方的说法是要比insert语句快上20倍,有需要的朋友可参考。使用方式如下&#xff1a;代码如下复制代码mysql>load data local infile "D:/ab.txt" in…

DARPA发布战略框架文件旨在 为美国国家安全创建突破性新技术能力

来源&#xff1a;ARPA网站/图片来自互联网12月4日&#xff0c;DARPA公开了于今年8月份完成的2019年度战略框架文件《面向国家安全创建技术突破和新能力》&#xff0c;阐述了该机构面临的威胁环境&#xff0c;并提出了未来几年的发展计划。1应关注的重点该框架文件指出&#xff…

python数学公式pdf文件的转换_python转换文件 多种文件转换为pdf

1.office文件这里用的是win32com, 需要注意已经安装的python版本是32位还是64位。安装后导入from win32com.client import Dispatch, constants, gencache, DispatchEx(1) word转PDFgencache.EnsureModule({00020905-0000-0000-C000-000000000046}, 0, 8, 4)w DispatchEx(&quo…

rust矿洞绳子怎么爬下_rust矿洞绳子怎么爬下_打工小伙爬冰救人,每动一下都能听到冰面碎裂声...

近日&#xff0c;在辽宁沈阳鲁迅公园&#xff0c;一男子掉进湖中冰窟窿&#xff0c;露出脑袋不停地呼救。生死时刻&#xff0c;一位正在附近找零活的小伙&#xff0c;不顾冰面碎裂发出的咔咔声&#xff0c;一步步爬冰救人&#xff0c;最终在岸上众人帮助下&#xff0c;成功救出…

Python爬虫入门四之Urllib库的高级用法

1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问&#xff0c;如果识别有问题&#xff0c;那么站点根本不会响应&#xff0c;所以为了完全模拟浏览器的工作&#xff0c;我们需要设置一些Headers 的属性。 首先&#xff0c;打开我们的浏览器&#xff0c;调试浏览器F…

Magic Leap 价值 20 多亿美元的 AR 幻梦,现在醒了

来源&#xff1a;传感器技术那个用特效来吹出 AR 神话的 Magic Leap&#xff0c;终于有了新动静。 当地时间 12 月 10 日&#xff0c;增强现实&#xff08;AR&#xff09;领域的“知名”公司 Magic Leap 宣布&#xff0c;将 Magic Leap One Creator Edition 改名为 Magic Leap …

mysql约束_不是吧,阿Sir,MySQL约束你竟然还不懂!

以前写的太乱了&#xff0c;翻出来重新整理下系列目录&#xff1a;MySQL入门&#xff0c;问题不大【增删改查极速上手】(一) 引入约束(1) 约束出现在哪里&#xff1f; 想要讲解约束&#xff0c;就要知道约束用在哪里&#xff0c;用来干嘛&#xff1f;SQL 语言通过定义一个关系所…

dc持久内存与mysql_Calypso Systems推出测试软件和服务器测试傲腾数据中心级持久内存...

Calypso Systems测试Optane DCPMM(DC Persistent Memory Module 数据中心级持久性内存模块)的性能&#xff0c;带宽超过36500MB/s(顺序读写速度128000MB/s)&#xff0c;每秒读写速度为3240万IOPS(顺序读取速度5000)&#xff0c;平均响应时间达到0.11微秒。Calypso PM(持久性内存…

计算机行业研究及2020年策略:聚焦主赛道,投资真成长(84页)

来源&#xff1a;国元证券1、行业涨幅位居前列&#xff0c;个股表现精彩纷呈……2、IT 产业大变革&#xff0c;新机遇不断涌现近年来&#xff0c;以 5G、物联网、云计算、大数据、人工智能、区块链等技术为代表的信息 科技行业快速发展&#xff0c;新兴技术不断涌现&#xff0c…

最长回文串_第78天——第78题(最长回文串 )

今天又是阴天&#xff0c;不过阴天凉快&#xff0c;我喜欢。第78天——第78题&#xff08;最长回文串&#xff09;看题目&#xff01;给定一个包含大写字母和小写字母的字符串&#xff0c;找到通过这些字母构造成的最长的回文串。在构造过程中&#xff0c;请注意区分大小写。比…

python是后端语言还是前端语言_从前端到后台-语言选择

截止至2019年10月&#xff0c;TIOBE编程语言排行如图所示这里重点考虑前三种语言和JS。C作为底层语言直接忽略&#xff0c;主要对JAVA&#xff0c;Python和JS进行对比。JAVA: 强类型静态语言&#xff0c;入门较Python难度更大&#xff0c;常用于企业级应用。如金融&#xff0c;…

二进制权值计算 lsb_2020年二级计算机基础知识备考(第二章)

点击蓝字关注我们哟~2020年9月全国计算机等级考试倒计时29天&#xff0c;还没有好好备考的小伙伴们抓紧时间备考了~今天&#xff0c;跟着考无忧继续备考一下二级计算机基础知识的《第二章 信息的表示和储存》。2.1数据与信息1.数据&#xff1a;客观事物的符号表示&#xff0c;如…

机器人产业这些领域大有可为

来源&#xff1a;中国机器人网前言&#xff1a;机器人产业面临哪些挑战&#xff0c;未来有哪些趋势&#xff1f;当前&#xff0c;世界正迎来新一轮科技革命。传统制造业转型升级释放出巨大的市场潜力&#xff0c;催生高科技机器人的新需求&#xff0c;成为加速产业发展的新动力…

mysql数据库安全机制研究意义_MySQL数据库的安全机制

收稿日期:2001 - 12 - 30   作者简介:李书振(1965 - ) ,男 ,河南人 ,工程师 ,主要研究方向:数据库原理及应用、管理信息系统. 文章编号 :1001 - 9081(2002)06 - 0051 - 03 MySQL 数据库的安全机制 李书振 (武汉大学 信息管理学院 ,湖北 武汉 430072) 摘  要 :MySQL 是一个多…