网站开发技术经理职责,营销型网站盈利模式,wordpress标题连接符,二级网站内容建设要求吗with语句适用于对资源进行访问的场合#xff0c;确保不管使用过程中是否发生异常都会执行必要的“清理”操作#xff0c;释放资源#xff0c;比如文件使用后自动关闭、线程中锁的自动获取和释放等。with表达式其实是try-finally的简写形式。但是又不是全相同。
确保不管使用过程中是否发生异常都会执行必要的“清理”操作释放资源比如文件使用后自动关闭、线程中锁的自动获取和释放等。with表达式其实是try-finally的简写形式。但是又不是全相同。 with 语句实质是上下文管理。
1、上下文管理协议。包含方法__enter__() 和 __exit__()支持该协议对象要实现这两个方法。
2、上下文管理器定义执行with语句时要建立的运行时上下文负责执行with语句块上下文中的进入与退出操作。
3、进入上下文的时候执行__enter__方法如果设置as var语句var变量接受__enter__()方法返回值。
4、如果运行时发生了异常或者with结构的程序结束就退出上下文管理器。调用管理器__exit__方法。class Benchmark():def __init__(self, prefixNone):self.prefix prefix if prefix else def __enter__(self):self.start time.time()def __exit__(self, *args):print(%stime: %.4f sec % (self.prefix, time.time() - self.start))with Benchmark(Workloads are quared.):for _ in range(100000):x nd.random.uniform(shape(2000, 2000))y nd.dot(x, x).sum()# 相当于
__init__(self, prefixNone)
__enter__(self)
for _ in range(100000):x nd.random.uniform(shape(2000, 2000))y nd.dot(x, x).sum()
__exit__(self, *args)
其中的context是一个表达式返回的是一个对象var用来保存context表达式返回的对象可以有单个或者多个返回值。
with open(1.txt) as f:print(f.read())print(f.closed)
表达式open(1.txt)返回是一个_io.TextIOWrapper 类型的变量用f接受到。在with语句块中就可以使用这个变量操作文件。执行with这个结构之后。f会自动关闭。相当于自带了一个finally。
若1.txt不存在不存在如下结果报出异常后该进程被杀死with本身并没有异常捕获的功能但是如果发生了运行时异常它照样可以关闭文件释放资源。
这个例子可以看出with没有捕获异常的功能。
。 1.txt不存在若1.txt存在如下结果 1.txt存在参考资料
https://www.jianshu.com/p/5b01fb36fd4chttps://www.cnblogs.com/xiaxiaoxu/p/9747551.html