Python上下文管理器学习

本文介绍了Python中的上下文管理器概念及其应用。通过with语句可以方便地管理资源,如文件的自动打开与关闭。此外,还展示了如何自定义上下文管理器,通过实现__enter__和__exit__方法来增强程序的功能。

   上下文管理器(context manager)用于规定某个对象的使用范围。进入或者离开该使用范围,会有特殊操作被调用。它的语法形式是with...as...

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


1 with ...as...示例

with open("test.txt", "w") as file:
    print(file.closed)
    file.write("with as test!")
print(file.closed)

   使用上下文管理器,当隶属的程序块执行结束的时候(也就是不再缩进),上下文管理器自动关闭了文件 (file.closed查询文件是否关闭)。使用缩进规定了文件对象f的使用范围

   当使用上下文管理器时,Python在进入程序块之前调用对象的__enter__()方法,在结束程序块的时候调用__exit__()方法。对于文件对象file来说,它定义了__enter__()和__exit__()方法(通过dir(file)可查看)。在file的__exit__()方法中,调用了self.close()语句


2 自定义上下文管理器

  所谓自定义上下文管理器,其实就是自己定义__enter__()和__exit__()方法。我们需要创建一个类,然后在其中定义__enter__()和__exit__()。


class test:
    def __init__(self, input):
        self.text = input
    def __enter__(self):
        self.text = "call __enter__ " + self.text
        return self                          #return an object
    def __exit__(self,exc_type,exc_value,traceback):
        self.text = self.text + " call __exit__"         


with test("hello") as mytest:
    print(mytest.text)
print dir(mytest)
print(mytest.text)


我们注意到: __exit__()有四个参数。当程序块中出现异常__exit__()的参数exc_type, exc_valuetraceback用于描述异常。我们可以根据这三个参数进行相应的处理。如果正常运行结束,这三个参数都是None




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值