1.什么是上下文管理器。
以下①②引用自python3.4API中关于with声明、语句上下管理器2部分的解释。
①.上下文管理器是一个对象,它定义了在执行with语句时要建立的运行时上下文。通常使用with语句调用,但也可以通过直接调用它们的方法来使用。上下文管理器的典型用途包括保存和恢复各种全局状态、锁定和解锁资源、关闭打开的文件(省去了file.close())等。
②.with语句用于对上下文管理器定义下的方法的执行。
一个简单的with使用如下:
with open(“text.txt”,encoding=“utf-8”) as file_in: #打开text.txt文件,将内容存储到file_in中
for line in file_in:
print(line)
2.上下文管理器中的2个主要方法。
相当于:enter控制开始的信息输入到as指定的对象中,exit控制管理结束后的文件关闭和内容清除。
__enter__(self) #输入与此对象相关的运行时上下文。with语句将此方法的返回值绑定到语句as子句中指定的目标。
__exit__(self, exc_type, exc_value, traceback) #退出与此对象相关的运行时上下文。后三个参数描述了导致上下文退出的异常(异常类型,异常值,回溯追踪)。如果上下文没有异常地退出,则所有三个参数都为None。
举个例子:以下代码的输出顺序就是①->②文本中的所有信息->③。
class file_read():
def __enter__(self):
print("this is enter") #①
f=open("text.txt",encoding="utf-8")
return f
def __exit__(self, exc_type, exc_val, exc_tb):
print("this is exit") #③
#以下2行代码在没有注释掉的情况下也不会有任何输出,应该是因为exit方法调用的时候已经将文件关闭掉了;但是这个方法中的代码是会被执行的
#for line in self.f:
# print(line+"test information")
if __name__== '__main__':
with file_read() as file_in:
for line in file_in:
print(line) #②