上下文管理器

实现上下文管理器,主要是为了简化代码,在一些文件操作和数据操作当中我们使用上下文管理器的方式可以在调用的时候更加快捷

方式1:

以文件操作为例,首先我们定义一个类,类中需要有init,enter,exit两个方法,enter一般需要返回接下来操作文件的对象,而exit一般用于收尾,就是关闭文件操作,init一般就是初始化

class  MyFile(object):
    def __init__(self,file_name):
        print("p初始化",file_name)
        self.file_name = file_name


    def __enter__(self):
        print("进")
        self.f = open(self.file_name, "r")
        return self.f

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("退")
        self.f.close()

这样一个基本的类实现好了,那么在调用的时候我们会更加简单的来执行文件操作

class  MyFile(object):
    def __init__(self,file_name):
        print("p初始化",file_name)
        self.file_name = file_name


    def __enter__(self):
        print("进")
        self.f = open(self.file_name, "r")
        return self.f

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("退")
        self.f.close()


with MyFile("./test_01.py") as f:
    content = f.read()
    print(content)

方式2:

基于方式1,python提供更加简单的方式来实现with上下文管理器,我们只需要定义一个函数,在函数名上加入@contextmanager,函数体中,将方式1中的enter 返回的对象,使用yeild 来声明下即可,代码如下:


from contextlib import contextmanager


@contextmanager
def MyFile(file_name):
    file = open(file_name, "r")
    yield file
    file.close()


with MyFile("./test_01.py") as f:
    content = f.read()
    print(content)

这种方式更加简单,但是可能不是很容易理解;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值