Python深入学习之上下文管理器

这篇文章主要介绍了Python深入学习之上下文管理器,上下文管理器是在Python2.5加入的功能,它能够让你的代码可读性更强并且错误更少,和C#中的using语句类似,需要的朋友可以参考下

上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存)。它的语法形式是with...as...

关闭文件

我们会进行这样的操作:打开文件,读写,关闭文件。程序员经常会忘记关闭文件。上下文管理器可以在不需要文件的时候,自动关闭文件

下面我们看一下两段程序:

复制代码 代码如下:

# without context manager

f = open("new.txt", "w")

print(f.closed)               # whether the file is open

f.write("Hello World!")

f.close()

print(f.closed)

以及:

复制代码 代码如下:

# with context manager

with open("new.txt", "w") as f:

    print(f.closed)

    f.write("Hello World!")

print(f.closed)

两段程序实际上执行的是相同的操作。我们的第二段程序就使用了上下文管理器 (with...as...)。上下文管理器有隶属于它的程序块。当隶属的程序块执行结束的时候(也就是不再缩进),上下文管理器自动关闭文件 (我们通过f.closed来查询文件是否关闭)。我们相当于使用缩进规定了文件对象f的使用范围。上面的上下文管理器基于f对象的__exit__()特殊方法(还记得我们如何利用特殊方法来实现各种语法?参看特殊方法与多范式)。当我们使用上下文管理器的语法时,我们实际上要求Python在进入程序块之前调用对象的__enter__()方法,在结束程序块的时候调用__exit__()方法。对于文件对象f来说,它定义了__enter__()和__exit__()方法(可以通过dir(f)看到)。在f的__exit__()方法中,有self.close()语句。所以在使用上下文管理器时,我们就不用明文关闭f文件了。

自定义

任何定义了__enter__()和__exit__()方法的对象都可以用于上下文管理器。文件对象f是内置对象,所以f自动带有这两个特殊方法,不需要自定义

下面,我们自定义用于上下文管理器的对象,就是下面的myvow:

复制代码 代码如下:

# customized objectclass VOW(object):

    def __init__(self, text):

        self.text = text

    def __enter__(self):

        self.text = "I say: " + self.text    # add prefix

        return self                          # note: return an object

    def __exit__(self,exc_type,exc_value,traceback):

        self.text = self.text + "!"          # add suffix

with VOW("I'm fine") as myvow:

    print(myvow.text)

print(myvow.text)

上一篇:深入学习Python中的上下文管理器与else块下一篇:python 上下文管理器及自定义原理解析 热门搜索

深入学习 

上下文管理器 

学习python 

上下文管理 

深度学习 

相关文章

Python深入学习之上下文管理器

2021-11-03阅读(3705)评论(0)推荐()

这篇文章主要介绍了Python深入学习之上下文管理器,上下文管理器是在Python2.5加入的功能,它能够让你的代码可读性更强并且错误更少,和C#中的using...

深入学习Python中的上下文管理器与else块

2021-11-03阅读(8110)评论(0)推荐()

这篇文章主要给大家介绍了关于Python中上下文管理器与else块的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

Python深入学习之内存管理

2021-10-09阅读(4643)评论(0)推荐()

这篇文章主要介绍了Python深入学习之内存管理,本文比较详细的讲解了Python的内存管理相关知识,需要的朋友可以参考下

Python实现上下文管理器的方法

2021-09-19阅读(5917)评论(0)推荐()

这篇文章主要介绍了Python实现上下文管理器的方法,帮助大家更好的理解和学习Python,感兴趣的朋友可以了解下

Python上下文管理器Content Manager

2021-09-20阅读(4387)评论(0)推荐()

在Python中,我们会经常听到上下文管理器,那么上下文管理器到底是干什么的,本文就来介绍一下,感兴趣的小伙伴们可以参考一下

详解python with 上下文管理器

2021-10-13阅读(8509)评论(0)推荐()

这篇文章主要介绍了python with和上下文管理器的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下

Python上下文管理器实现方法总结

2021-10-13阅读(10305)评论(0)推荐()

在本篇文章里小编给大家整理的是关于Python上下文管理器实现方法总结内容,有兴趣的朋友们可以学习参考下。

取消

有人回复邮件通知

提交评论

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...