Python上下文管理器学习
2017-01-17 13:14
363 查看
上下文管理器(context
manager)用于规定某个对象的使用范围。进入或者离开该使用范围,会有特殊操作被调用。它的语法形式是with...as...
我们经常会进行这样的操作:打开文件,读写,关闭文件。偶尔会忘记关闭文件,使用上下文管理器可以在不需要文件的时候,自动关闭文件。
1 with ...as...示例
with open("test.txt", "w") as file:
print(file.closed)
file.write("with as test!")
print(file.closed)
使用上下文管理器,当隶属的程序块执行结束的时候(也就是不再缩进),上下文管理器自动关闭了文件
(file.closed查询文件是否关闭)。使用缩进规定了文件对象f的使用范围。
当使用上下文管理器时,Python在进入程序块之前调用对象的__enter__()方法,在结束程序块的时候调用__exit__()方法。对于文件对象file来说,它定义了__enter__()和__exit__()方法(通过dir(file)可查看)。在file的__exit__()方法中,调用了self.close()语句。
2
自定义上下文管理器
所谓自定义上下文管理器,其实就是自己定义__enter__()和__exit__()方法。我们需要创建一个类,然后在其中定义__enter__()和__exit__()。
class test:
def __init__(self, input):
self.text = input
def __enter__(self):
self.text = "call __enter__ " + self.text
return self #return an object
def __exit__(self,exc_type,exc_value,traceback):
self.text = self.text + " call __exit__"
with test("hello") as mytest:
print(mytest.text)
print dir(mytest)
print(mytest.text)
我们注意到: __exit__()有四个参数。当程序块中出现异常,__exit__()的参数中exc_type, exc_value, traceback用于描述异常。我们可以根据这三个参数进行相应的处理。如果正常运行结束,这三个参数都是None。
manager)用于规定某个对象的使用范围。进入或者离开该使用范围,会有特殊操作被调用。它的语法形式是with...as...
我们经常会进行这样的操作:打开文件,读写,关闭文件。偶尔会忘记关闭文件,使用上下文管理器可以在不需要文件的时候,自动关闭文件。
1 with ...as...示例
with open("test.txt", "w") as file:
print(file.closed)
file.write("with as test!")
print(file.closed)
使用上下文管理器,当隶属的程序块执行结束的时候(也就是不再缩进),上下文管理器自动关闭了文件
(file.closed查询文件是否关闭)。使用缩进规定了文件对象f的使用范围。
当使用上下文管理器时,Python在进入程序块之前调用对象的__enter__()方法,在结束程序块的时候调用__exit__()方法。对于文件对象file来说,它定义了__enter__()和__exit__()方法(通过dir(file)可查看)。在file的__exit__()方法中,调用了self.close()语句。
2
自定义上下文管理器
所谓自定义上下文管理器,其实就是自己定义__enter__()和__exit__()方法。我们需要创建一个类,然后在其中定义__enter__()和__exit__()。
class test:
def __init__(self, input):
self.text = input
def __enter__(self):
self.text = "call __enter__ " + self.text
return self #return an object
def __exit__(self,exc_type,exc_value,traceback):
self.text = self.text + " call __exit__"
with test("hello") as mytest:
print(mytest.text)
print dir(mytest)
print(mytest.text)
我们注意到: __exit__()有四个参数。当程序块中出现异常,__exit__()的参数中exc_type, exc_value, traceback用于描述异常。我们可以根据这三个参数进行相应的处理。如果正常运行结束,这三个参数都是None。
相关文章推荐
- Python深入学习之上下文管理器
- Python中的with语句与上下文管理器学习总结
- python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)
- Python深入学习之上下文管理器
- Python菜鸟晋级05----with....as....(上下文管理器)
- python 学习第十一课 上下文管理 paramiko 堡垒机 mysql操作
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- Python之上下文管理器
- python学习笔记:利用contextlib和@contextmanager实现with语句上下文实例
- Python 学习笔记 - 上下文
- pythonchanllenge: 解决迷题,非常有趣的学习python的方式
- 开始学习python了.
- 学习Python知识小结 杂记二
- 使用minidom来处理XML的示例(Python 学习)(转载)
- 开始学习python
- Python相关模块学习1 处理文件名模块glob
- Python学习笔记
- Python学习
- python 与 ruby (ruby学习资源大全)
- Python 学习小记:Python Tutorial