这篇文章是我学习python过程中遗漏的知识。以前一直是背代码模板,打开文件用with关键字,但是不知道其中的原理。原来with关键字是用来自动关闭资源的,这一点和java的try-with-resource语法功能是一致的。
关闭资源
关闭资源最好的例子就是文件资源。如果不使用with关键字那么就要用try和finally了,如以下代码:
# _*_ coding:utf-8 _*_
if __name__ == '__main__':
f = open('F:\learn\math-algorithm\README.md', 'r')
try:
print(f.read())
finally:
f.close()
输出的是这个文件的内容:
#math-algorithm
如果用with关键字改写就是这样的:
# _*_ coding:utf-8 _*_
if __name__ == '__main__':
with open('F:\learn\math-algorithm\README.md', 'r') as f:
print(f.read())
效果也是一样的:
#math-algorithm
上下文管理器
就像java的try-with-resource必须要对象实现AutoCloseable接口一样,python的with关键字要生效也必须实现上下文管理器。我打算自己写一个类来试一试。
先写一个简单的类实现上下文管理器:
class SimpleResource:
def __enter__(self):
print('打开资源')
def __exit__(self, exc_type, exc_val, exc_tb):
print('关闭资源', exc_type, exc_val, exc_tb)
然后使用with关键字调用它:
# —*— coding:utf-8 _*_
from com.youngthing.basic.SimpleResource import SimpleResource
if __name__ == '__main__':
with SimpleResource() as sr:
pass
输出结果:
打开资源
关闭资源 None None None