在Python中,关键字with被称作上下文管理语句,其特点在于能够自动管理资源,能够保证退出代码块时自动恢复上下文。以文件操作为例,很多人会像下面的代码这样写:

fp = open('test.txt', 'w')

fp.write('Hello world')

fp.close()

这也是文件操作的标准套路:打开文件-->读写文件-->关闭文件,看上去也中规中矩 。但是,这样的代码还是不够Pythonic,一来代码不够简洁,再就是一旦打开文件和关闭文件之间的代码出现问题抛出异常,后面的代码就无法执行了,无法正常关闭文件。例如下面的代码:

fp = open('test.txt', 'w')

fp.write('Hello world')

fp.write(str(1/0))

fp.close()

上面的代码会抛出异常,从而导致关闭文件的代码没有执行,从而导致写入的内容并没有真正保存到磁盘文件中去,当前文件夹中的test.txt是空的,里面没有内容。

在进行文件内容操作时,建议使用上下文管理语句with,使用下面的写法,一来不用专门编写关闭文件的close()代码,二来可以保证文件总是能被关闭,即使是代码块抛出异常导致程序崩溃。

with open('test.txt', 'w') as fp:

fp.write('Hello world')

fp.write(str(1/0))

可以发现,当前文件夹中的test.txt文件中保存了第一次写入的字符串Hello world。

with关键字还支持同时管理多个资源,例如:

with open('test.txt') as src, open('dst.txt', 'w') as dst:

dst.write(src.read())

另外,with关键字也适用于数据库连接,例如:

import sqlite3

with sqlite3.connect('database.db') as conn:

cur = conn.cursor()

for record in cur.execute('SELECT * FROM students'):

print(record)

用于多线程与多进程同步的Semaphore、Condition等对象也支持with关键字,可以进入公众号“Python小屋”以后通过菜单“最新资源”==>“历史文章分类速查表”查阅有关文章。

使用with关键字让你的Python代码更加Pythonic相关推荐

  1. python代码技巧_几个小技巧让你的Python代码更Pythonic

    Python是一门非常灵活的语言,很多语法是其他语言不具备的,特别是对于从C.Java等语言转向Python的人来说,很容易按照C.Java等语言的写法来写Python,对于初学者来说,如果对Pyth ...

  2. 9个技巧使你的Python代码更Pythonic

    目录 前言 01 product() 使用 product() 函数避免嵌套的Python循环 02 海象操作符 赋值表达式的一个可爱技巧 03 三元条件运算符 用一行写一个简单的If-Else结构 ...

  3. 《编写高质量Python代码的59个有效方法》——第19条:用关键字参数来表达可选的行为...

    本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第19条:用关键字参数来表达可选的行为,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章节内容可以 ...

  4. python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!

    我们都喜欢 Python,因为它让编程和理解变的更为简单.但是一不小心,我们就会忽略规则,以非 Pythonic 方式编写一堆垃圾代码,从而浪费 Python 这个出色的语言赋予我们的优雅.Pytho ...

  5. 又一个Jupyter神器,操作Excel自动生成Python代码

    来源 | Python数据科学(ID: PyDataScience) 不得不说,Jupyter对于表的处理真的是越来越方便了,很多库可以直接实现可视化操作,无需写代码.但是这还不够,最近看到一个神器叫 ...

  6. plot参数详解python_30行Python代码实现3D数据可视化

    作者:潮汐 来源:Python技术 欢迎来到编程教室~ 我们之前的文章中有讲解过不少 Matplotlib 的用法,比如: 完成这50个Matplotlib代码,你也能画出优秀的图表 25个常用Mat ...

  7. python代码实现堆排序

    python代码实现堆排序 在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿. 堆是一棵顺序存储的完全二叉树. 其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆,或者叫最小堆: ...

  8. 独家 | 数据科学家对可复用Python代码的实用管理方法(附链接)

    作者:Matthew Mayo, KDnuggets翻译:殷之涵校对:欧阳锦本文约3000字,建议阅读5分钟本文为大家介绍了四种关于复用Python代码的管理方法,以提高代码的效率及可读性等. 标签: ...

  9. python数据分析神器_牛逼啊!一个随时随地写Python代码的神器

    作者: Leoxin 公众号:菜鸟学Python 现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练 ...

最新文章

  1. 关于数据库中存储过程 的用户从属。。
  2. Android 根据Uri删除文件
  3. 新手课堂之汽车灯光操作及位置
  4. VB中Unload、END、Hide的区别
  5. 前端组件化和模块化最大的区别是什么_7招提升你的前端开发效率
  6. 使用js获取页面参数
  7. 谈谈研发PLM项目管理
  8. 简易旋转倒立摆设计报告
  9. matlab求线与面的夹角,基于MATLAB的通用晶面间夹角公式的推导与求解
  10. 智慧消防:如何利用智能化手段,精准防控消防风险?
  11. 为什么是深度神经网络而不是宽度神经网络?增加神经网络的深度相比于增加宽度有哪些优点?
  12. 盘点13个值得程序员逛的论坛
  13. php获取qq空间,使用php进行批量抓取QQ空间相册链接
  14. 如何选择固定资产标签?
  15. git查看stash里面的具体内容
  16. 固态硬盘有哪些协议知识点?
  17. 鸿蒙系统下拉菜单,华为鸿蒙系统官方
  18. Chips交互操作和集合论
  19. 如何解决电脑C盘不能扩展问题
  20. Asset Pricing:Introduction

热门文章

  1. mysql with-embedded-server_终于成功实验程序实现Embedded MySQL Server启动(C/C++)
  2. python中pd是什么意思_python怎么用pd导入xlsx
  3. jsp给前端注入值失败_基于 qiankun 的微前端最佳实践(图文并茂) 应用间通信篇...
  4. mongodb创建普通用户并授权readWrite角色,并允许访问某一数据库
  5. php ci框架结构,CI框架目录结构分析
  6. python中psum是什么意思_python中**是什么
  7. ObservableScrollView实现
  8. android源码出现的@字符代表什么意思
  9. 基于JAVA+Spring+MYSQL的失物招领管理系统
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院预约挂号系统