• with上下文管理协议


    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年.....
    死亡
  • 相关阅读:
    管理ceph缓存池
    Ceph更换OSD磁盘
    crushmap磁盘智能分组
    Angular 初体验
    音视频开发-FFmpeg
    开源项目OEIP 游戏引擎与音视频多媒体(UE4/Unity3D)
    Yolov3代码分析与训练自己数据集
    整合Yolov3到UE4/Unity3D
    CUDA版Grabcut的实现
    CUDA加opencv复现导向滤波算法
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12026152.html
Copyright © 2020-2023  润新知