合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# 上下文管理器 # 上下文管理器(Context managers) 上下文管理器允许你在有需要的时候,精确地分配和释放资源。 对它使用最广泛的案例就是`with`语句了。 想象下当你有两个相关操作,你想让它们结对执行,然后在它们俩中间放置一段代码。 上下文管理器就是专门让你做这个事情的。举个例子: ~~~ with open('some_file', 'w') as opened_file: opened_file.write('Hola!') ~~~ 上面这段代码打开了一个文件,往它里面写入了一些数据,然后关闭了它。如果在往文件写数据时发生异常,它会尝试去关闭文件。上面那段代码与这一段是等价的: ~~~ file = open('some_file', 'w') try: file.write('Hola!') finally: file.close() ~~~ 当与第一个例子对比时,我们可以看到,通过使用`with`,许多样板代码(boilerplate code)被消掉了。 这就是`with`语句的主要优势,它确保我们的文件会被关闭,而不用关注嵌套代码如何退出。 上下文管理器的一个常见用例,是资源的加锁和解锁,以及关闭已打开的文件(就像我已经展示给你看的)。 让我们看看如何来实现我们自己的上下文管理器。这会让我们更完全地理解在这些场景背后都发生着什么。