Python 中的 with 语句
Python 提供了各种功能和选项来改进我们现有的代码。 其中一项功能是 with 关键字。
本篇文章将介绍with语句的功能及其在Python中的应用。
在Python中使用with语句
该语句本质上用于帮助处理异常并在使用资源时清理资源。 它确保代码正确执行并随后清理资源。
大多数情况下,您会在文件处理中发现 with 语句的使用。 让我们讨论一个例子。
f = open('path\file.txt', 'w')
f.write('Sample Content')
f.close()
在上面的示例中,我们使用 open()
函数打开了一个文件,并使用 write()
方法写入了一些内容。 然后,close()
函数关闭文件对象并清理资源。
让我们看看上面的代码使用 with 关键字是什么样子。
with open('path\file.txt') as f:
f.write('Sample Content')
在代码中,我们可以看到,使用 with 语句,我们能够消除 close()
函数的使用。
with 语句有用的另一个例子是封装 try 和 finally 块。
例如,
f = open('path\file.txt', 'w')
try:
f.write('Sample Content')
finally:
f.close()
try 块接受类似于打开文件的代码,并且无论 try 块中的代码是否引发异常,finally 块中的代码都会执行。 在上面的示例中,即使 write()
函数引发异常,finally 块中的代码也将执行并运行 close()
函数。
我们已经在前面的示例中看到了如何使用 with 语句来实现此目的。
我们还可以将 with 语句与用户定义的对象一起使用,此类对象称为上下文管理器。 他们定义了 __enter__
和 __exit__
方法。
__enter__
方法在使用 with 语句创建此类的对象时执行。 __exit__
方法在 with 块中的代码完成时执行。
class writer_class(object):
def __init__(self, filename):
self.filename = filename
def __enter__(self):
self.f = open(self.filename, "w")
return self.f
def __exit__(self, exception, value):
self.f.close()
with writer_class('file.txt') as f:
f.write('DelftStack')
Python中上述类的对象在创建时会执行 __enter__
方法,该方法用于打开文件。 close()
函数放在 __exit__
方法中,用于在代码执行后关闭文件对象。
与类一样,我们可以使用 contextlib 库来创建上下文管理器方法。 这些方法可以使用 @contextmanager
装饰器来创建,该装饰器放在定义的函数之前。
例如,
from contextlib import contextmanager
@contextmanager
def new_open(file):
try:
f = open(file, "w")
yield f
finally:
f.close()
with new_open("sample.txt") as f:
f.write("DelftStack")
在示例代码中,我们可以看到 @contextmanager
装饰器的使用,它允许我们创建此类方法。 在定义的函数中,我们放置了创建文件对象并使用 try 和 finally 块关闭创建的对象的完整代码。
总结
最后,我们讨论了 Python 中的 with 语句及其用法。 我们首先讨论了该语句的基础知识,以及它如何通过清理资源来提高代码可读性和效率。
我们重点关注其最常见的文件处理应用程序来演示其用途。 我们还讨论了上下文管理器及其方法以及如何将 with 语句与它们一起使用。
相关文章
Python 单步执行代码
发布时间:2023/06/29 浏览次数:145 分类:Python
-
在本文中,我们将讨论使用 Python 调试器单步调试代码。 我们将从头开始解释一个名为 PDB 的命令行工具。 我们还将学习如何在 Python IDLE 的帮助下逐步执行代码。
Python 编辑距离
发布时间:2023/06/29 浏览次数:67 分类:Python
-
今天,我们将学习Python中的编辑距离。 我们还将探讨字符串的插入、删除、替换和递归实现。在 Python 中编辑距离 编辑距离是将一个字符串转置为另一个字符串所需的量。
type.Dict 和 Dict 之间的区别及其在 Python 中的用途
发布时间:2023/06/28 浏览次数:93 分类:Python
-
本文讨论如何将类型提示与 Typing.Dict 结合使用,并将其与通常的 dict 函数区分开来。type.Dict 和 dict 之间的区别及其在 Python 中的用途
在 Python 中解析 JSON 对象数组
发布时间:2023/06/28 浏览次数:57 分类:Python
-
由于浏览器可以快速解析 JSON 对象,因此它们有助于在客户端和服务器之间传输数据。 本文将介绍如何使用Python的JSON模块传输和接收JSON数据。
在 Python 中等待 5 秒
发布时间:2023/06/28 浏览次数:152 分类:Python
-
本篇文章将讨论如何在 Python 中等待 5 秒。在 Python 中使用 time.sleep() 函数等待 5 秒 Python 的 time 模块提供了存储和操作时间的功能和对象。
Python 中的模糊字符串匹配
发布时间:2023/06/28 浏览次数:89 分类:Python
-
今天,我们将学习如何使用 thefuzz 库,它允许我们在 python 中进行模糊字符串匹配。 此外,我们将学习如何使用 process 模块,该模块允许我们借助模糊字符串逻辑有效地匹配或提取字符串。Py
在 Python 中执行 Shell 命令并获取输出
发布时间:2023/06/28 浏览次数:81 分类:Python
-
在本文中,我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。从 Python 脚本执行 CMD 命令并使用 os
Python 中的 Monkey 补丁
发布时间:2023/06/28 浏览次数:186 分类:Python
-
本文解释了什么是Monkey补丁以及如何在 Python 中实现它。 它有两个部分; 第一个演示了函数中的Monkey修补,第二个演示了如何在文件的单元测试中实现它。
Python 中的 Mock 和 Patch 之间的区别
发布时间:2023/06/28 浏览次数:182 分类:Python
-
在 Python 中,我们有一个称为单元测试的过程,其中包含模拟和补丁函数。 本文将讨论这两个角色的用途和区别。Python 中 Mock 和 Patch 对象库的用途和区别