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
python中with的用法_python 中 with的用法相关推荐
- python常用函数的用法_python中常用函数整理
1.map map是python内置的高阶函数,它接收一个函数和一个列表,函数依次作用在列表的每个元素上,返回一个可迭代map对象. class map(object):""&qu ...
- [转载] python中string函数的用法_python中string模块各属性以及函数的用法
参考链接: Python中的string.octdigits 任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作. python的字符 ...
- python map用法_Python中 map()函数的用法详解
python map()函数问题 使用map()函数生成一个值D但是检测D的长度时,只能测一次,一次之后D似不知道你的dataSet 是什么数据,是否是从数据库取出来的结果游标, 如果是的 那么dat ...
- python not用法_python中not、and和or的优先级与详细用法介绍
前言 (小白专用)本次所分享的是python中的not.and.or的执行时的优先级,以及他们的具体用法.本文比较详细,不喜勿喷. 一.not.and.or的含义以及优先级 对象 返回结果 优先顺序 ...
- python中try的用法_python中的 try...except...finally 的用法
python中的 try...except...finally 的用法 author:headsen chen date:2018-04-09 16:22:11 try, except, finall ...
- python中strip的用法_Python中你不知道的strip()函数的妙用
[开胃小菜] 当提到python中strip方法,想必凡接触过python的同行都知道它主要用来切除空格.有以下两种方法来实现. 方法一:用内置函数if name == 'main' : str = ...
- python中finally的用法_python中的finally用法
来源:强哥 公众号:Python与数据分析 链接:https://mp.weixin.qq.com/s/6jBvyl1YoVBRyVQCdC67Sg 无论try语句中是否抛出异常,finally ...
- python中的datetime函数_Python datetime函数常见用法总结
Python datetime使用指导:操作时间.日期和时间区间 在 Python 中处理日期和时间是一个很麻烦的问题.幸运的是,Python 提供了内置方法来简化这种操作:Python Dateti ...
- python中array的用法_Python中的numpy.array()用法
齐次多维数组是NumPy的主要对象.它基本上是一个元素表, 这些元素都是相同类型的, 并由一个正整数元组索引.尺寸在NumPy中称为轴. NumPy的数组类称为ndarray或别名数组. numpy. ...
- python中的元类_Python中的元类(metaclass)
提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自身有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理 ...
最新文章
- 永久设置SecureCRT的背景色和文字颜色方案
- 【Flutter学习】组件学习之目录
- python No migrations to apply
- kaggle账号_机器学习竞赛入门--kaggle篇
- C++高级进阶教程之STL 教程
- (22)Linux下解压unrar文件
- Atitit 乱码的检测与纠正总结 目录 1. Atitit.request 乱码的检测与解决 attilax总结	1 1.1. 乱码的检测,,可以检测,列徐俩个问好??	1 1.2. 使用常用汉字
- win10默认安装路径修改_问题解答|Win10电脑重启桌面图标就变乱的解决方法!
- Android-S模拟器
- CORS Missing Allow Origin
- 奥斯汀计算机专业排名,德克萨斯大学奥斯汀分校计算机工程类专业排名
- FPGA_UART串口通信
- 需要精读3遍的8个健身知识
- UVM-TLM通信机制(四)
- PAT日志 1095
- MATLAB函数指令——xlsread()数据读取
- C8051F340 USB Fn hacking
- 更改计算机名称无法用用友,用友T3计算机名称更改不了怎么办?
- 酷柚易汛进销存-如何新增账户?
- 假设今年的工业产值为100万元,产值增长率为每年c%,请编程计算当c分别为6、8、10、12时工业产值分别过多少年可实现翻一番(即增加一倍)
热门文章
- html5 职工入职后台管理系统_ChemCMS是一款基于GO+PHP+MYSQL+HTML5构建的化学内容管理系统
- dll侧加载_WORD打开时出现加载DLL错误解决方法
- getset原子性 redis_一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)
- 聊聊推荐系统中的偏差
- 论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入
- 论文浅尝 | 用于视觉推理的显式知识集成
- 注意力机制-深度学习中的注意力机制+注意力机制在自然语言处理中的应用
- Java栈内存、堆内存、方法区对对象和引用的关系
- 图的遍历——深度优先搜索+广度优先搜索
- 系统上线日期被老外逼得延期了!