with open('data.txt', 'r') as f:
    lines = f.readlines()
    for line in lines:
        print(line.split())

类上面这段代码在python中很常见,就是使用with去管理资源。

其原理就是使用__entry__ 和__exit__ 这两个魔法函数、

 

下面编写一个示例,模拟with的功能

class Person:
    def __init__(self, name):
        print('初始化一个人.....'+ name)
        self.name = name

    # 可以看成是获取资源
    def __enter__(self):
        print('出生')
        return self

    # 可以看成是释放资源
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('死亡')

    def work(self):
        print(self.name + '工作30年')

if __name__ == '__main__':
    p = Person('小明')
    p.work()

    print('------------------')

with Person('小明') as person:
    person.work()

 

打印结果如下:

['name', 'admin']
['age', '12']
初始化一个人.....小明
小明工作30年
------------------
初始化一个人.....小明
出生
小明工作30年
死亡

 

在某些场景 ,我们就可以使用with上下文管理器去写代码,可以大大的简化代码量!

 

是不是感觉很牛逼。。。。

不,python中还有一个内置的上下文管理库contextlib, 使用它看起来就更牛逼了,请看下面代码 

 

import  contextlib

@contextlib.contextmanager
def work():
    print("出生")
    #yield {}
    yield
    print("死亡")


with work() as w:
    print('工作30年.....')

 

 

打印结果:

出生
工作30年.....
死亡
posted on 2019-12-11 22:12  显示账号  阅读(145)  评论(0)    收藏  举报