• 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年.....
    死亡
  • 相关阅读:
    Word批量转PDF或者图片
    sqlite3数据c/c++接口编程<linux,window>
    静态库和动态库
    QT信号和槽
    C程序编译过程
    Volatile关键字
    端口复用setsockopt
    深入理解epoll(转载)
    临时变量
    json学习随笔
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12026152.html
Copyright © 2020-2023  润新知