在 Python 中使用上下文管理器context manager的 5 个层次

在 Python 中使用上下文管理器的 5 个层次(5 Levels of Using Context Managers in Python)

不仅是关于 "with "的说法

与上下文管理器context managers相对的 "with "语句是初学者最容易混淆的 Python 特性之一。因为并不是每种编程语言都有这种语法。

因此,不幸的是,Python 开发人员的许多面试问题都围绕着这个主题。仅列举几个:

  • Python 中的 "with "语句有什么作用?
  • 你能把上下文管理器context manager写成一个 Python 类吗?
  • 您能将上下文管理器context manager写成一个 Python 函数吗?
  • 如何在 Python 中异步处理上下文管理器?

似乎很吓人?

完全不用担心。本文将使用适合初学者的示例,逐步揭开这一主题的神秘面纱。

1. 什么是上下文管理器?

由于每台机器的计算资源都是有限的,因此每个程序都需要考虑资源管理。比如文件处理,最好在使用完文件后将其关闭。

例如,如果我们在一个循环中打开超过 1000000 个文件,并且像下面的程序一样从不关闭任何文件:

files = []
for x in range(1000000):
    files.append(open('test.txt', 'w'))

将出现错误:

OSError: [Errno 24] Too many open files: 'test.txt'

因此,只要不再需要,就应关闭每个已打开的文件。

Python 有相对的内置函数built-in functions,因此我们可以方便地打开和关闭文件。

f = open("test.txt", 'w')
f.write("Hi,Yang!")
f.close()

上述程序是可行的。但是,如果 open()close() 之间的处理过程变得更加复杂,并且出现错误,那么没有人能够保证文件最终会被关闭。

更不用说,如果我们总是需要手动关闭打开的文件,那么当程序变得越来越复杂时,我们很可能会忘记关闭其中的一些文件,而如果 Python 不能自动为我们关闭这些文件,那就真的不够优雅了。

这里介绍了Python中的上下文管理器context managers和 “with” 语句。简单地说,它们是Python中简化资源管理的特性。

在深入研究 “with” 语句之前,让我们先来看看一种经典的方法。

2. 使用 “try…except…finally” 结构

显然,我们需要确保无论在文件处理过程中发生了什么,文件最终都会被关闭。与其他编程语言一样,我们可以编写 "try…except…finally "结构来实现这一点。

例如,下面的程序会打开一个文件,无论 “writing” 操作成功与否,它都会关闭该文件:

f = open("test.txt",'w')
try:
    f.write
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值