Python语法系列(9)-为什么要用with

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

1.问题引出

如下代码:

1

2

3

上面代码存在2个问题:

(1)文件读取发生异常,但没有进行任何处理;

(2)可能忘记关闭文件句柄;

2.改进

虽然这段代码运行良好,但比较冗长。

而使用with的话,能够减少冗长,还能自动处理上下文环境产生的异常。如下面代码:

3.with 工作原理

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

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

-案例解析-

print(content)

在这个程序中,第1行代码做了大量的工作。我们先来看看函数open() 。要以任何方式使用文件——哪怕仅仅是打印其内容,都得先打开 文件,这样才能访问它。

函数open()接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。在这个示例中,当前运行的是file_reader.py,因此Python在file_reader.py所在的目录中查找ai.txt。函数open() 返回一个表示文件的对象。在这里,open('ai.txt') 返回一个表示文件pi_digits.txt 的对象;Python将这个对象存储在我们将在后面使用的变量中。

关键字with 在不再需要访问文件后将其关闭。在这个程序中,注意到我们调用了open() ,但没有调用close() ;你也可以调用open() 和close() 来打开和关闭文件,但这样做时,如果程序存在bug,导致close() 语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调用close() ,你会发现需要使用文件时它已关闭 (无法访问),这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用前面所示的结构,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。

参考:

http://blog.kissdata.com/2014/05/23/python-with.html

《Python编程:从入门到实践》

【同系列文章如下:】

【Python语法系列(8)-分号”;“和斜杠”\“】

【Python语法系列(7)-匿名函数lambda】

【Python语法系列(6)-break和continue的用法】

【Python语法系列(5)- *和**变量】

【Python语法系列(4)-append和extend】

【Python语法系列(3)-yield 生成器】

【Python语法系列(2)-__init__和__str__】

【Python语法系列(1)-可变对象和不可变对象】

来自:Pixabay

-end-

小编有话说

更多的资讯,技术欢迎读者朋友给我们留言,我们会在第一时间给大家分享,也期待有技术,有才学的博主给我们投稿分享原创文章。请在本公众号(AITop100)对话界面,找到“我们”,给我们留言。

AITop100

机器学习领域分享达人

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180423G02F3A00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券