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
机器学习领域分享达人
领取专属 10元无门槛券
私享最新 技术干货