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的用法相关推荐

  1. python常用函数的用法_python中常用函数整理

    1.map map是python内置的高阶函数,它接收一个函数和一个列表,函数依次作用在列表的每个元素上,返回一个可迭代map对象. class map(object):""&qu ...

  2. [转载] python中string函数的用法_python中string模块各属性以及函数的用法

    参考链接: Python中的string.octdigits 任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作. python的字符 ...

  3. python map用法_Python中 map()函数的用法详解

    python map()函数问题 使用map()函数生成一个值D但是检测D的长度时,只能测一次,一次之后D似不知道你的dataSet 是什么数据,是否是从数据库取出来的结果游标, 如果是的 那么dat ...

  4. python not用法_python中not、and和or的优先级与详细用法介绍

    前言 (小白专用)本次所分享的是python中的not.and.or的执行时的优先级,以及他们的具体用法.本文比较详细,不喜勿喷. 一.not.and.or的含义以及优先级 对象 返回结果 优先顺序 ...

  5. python中try的用法_python中的 try...except...finally 的用法

    python中的 try...except...finally 的用法 author:headsen chen date:2018-04-09 16:22:11 try, except, finall ...

  6. python中strip的用法_Python中你不知道的strip()函数的妙用

    [开胃小菜] 当提到python中strip方法,想必凡接触过python的同行都知道它主要用来切除空格.有以下两种方法来实现. 方法一:用内置函数if name == 'main' : str = ...

  7. python中finally的用法_python中的finally用法

    来源:强哥  公众号:Python与数据分析   链接:https://mp.weixin.qq.com/s/6jBvyl1YoVBRyVQCdC67Sg 无论try语句中是否抛出异常,finally ...

  8. python中的datetime函数_Python datetime函数常见用法总结

    Python datetime使用指导:操作时间.日期和时间区间 在 Python 中处理日期和时间是一个很麻烦的问题.幸运的是,Python 提供了内置方法来简化这种操作:Python Dateti ...

  9. python中array的用法_Python中的numpy.array()用法

    齐次多维数组是NumPy的主要对象.它基本上是一个元素表, 这些元素都是相同类型的, 并由一个正整数元组索引.尺寸在NumPy中称为轴. NumPy的数组类称为ndarray或别名数组. numpy. ...

  10. python中的元类_Python中的元类(metaclass)

    提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自身有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理 ...

最新文章

  1. 永久设置SecureCRT的背景色和文字颜色方案
  2. 【Flutter学习】组件学习之目录
  3. python No migrations to apply
  4. kaggle账号_机器学习竞赛入门--kaggle篇
  5. C++高级进阶教程之STL 教程
  6. (22)Linux下解压unrar文件
  7. Atitit 乱码的检测与纠正总结 目录 1. Atitit.request 乱码的检测与解决 attilax总结 1 1.1. 乱码的检测,,可以检测,列徐俩个问好?? 1 1.2. 使用常用汉字
  8. win10默认安装路径修改_问题解答|Win10电脑重启桌面图标就变乱的解决方法!
  9. Android-S模拟器
  10. CORS Missing Allow Origin
  11. 奥斯汀计算机专业排名,德克萨斯大学奥斯汀分校计算机工程类专业排名
  12. FPGA_UART串口通信
  13. 需要精读3遍的8个健身知识
  14. UVM-TLM通信机制(四)
  15. PAT日志 1095
  16. MATLAB函数指令——xlsread()数据读取
  17. C8051F340 USB Fn hacking
  18. 更改计算机名称无法用用友,用友T3计算机名称更改不了怎么办?
  19. 酷柚易汛进销存-如何新增账户?
  20. 假设今年的工业产值为100万元,产值增长率为每年c%,请编程计算当c分别为6、8、10、12时工业产值分别过多少年可实现翻一番(即增加一倍)

热门文章

  1. html5 职工入职后台管理系统_ChemCMS是一款基于GO+PHP+MYSQL+HTML5构建的化学内容管理系统
  2. dll侧加载_WORD打开时出现加载DLL错误解决方法
  3. getset原子性 redis_一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)
  4. 聊聊推荐系统中的偏差
  5. 论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入
  6. 论文浅尝 | 用于视觉推理的显式知识集成
  7. 注意力机制-深度学习中的注意力机制+注意力机制在自然语言处理中的应用
  8. Java栈内存、堆内存、方法区对对象和引用的关系
  9. 图的遍历——深度优先搜索+广度优先搜索
  10. 系统上线日期被老外逼得延期了!