1 | with open('file_name') as f: |
能够使用 with 语句块的条件是 with 所求值的对象必须有一个 __enter__()
方法,一个 __exit__()
方法。
而紧跟在 with 关键字后面的语句被求值后,返回对象的 __enter__()
方法被调用,这个方法的返回值将被赋值给 as
后面的变量。当 with 语句块中的全部语句被执行完之后,将调用前面返回对象的 __exit__()
方法。
对于读写文件来说,使用 with 语句块一般较为保险。在读文件时,如果使用了 with 语句块,在代码块结束后,由于自动执行了 __exit__()
方法,因此不需要手动使用 close()
方法来关闭被读的文件;当写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存中缓存起来,空闲的时候再进行写入,只有调用 close()
方法时,操作系统才保证把没有写入的数据全部写入磁盘,忘记调用 close()
的后果是数据可能只写了一部分到磁盘,剩下的丢失了,而使用 with语句块就有效避免了这个问题。