zoukankan      html  css  js  c++  java
  • 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年.....
    死亡
  • 相关阅读:
    WebView中实现文件下载功能
    PrograssBar的setIndeterminateDrawable不起作用
    62个Android Studio小技巧合集
    Touch 事件的分发和消费机制
    AndroidStudio
    pagefile.sys and heberfil.sys
    android ANR产生原因和解决办法
    JAVA中分为基本数据类型及引用数据类型
    handler
    洛谷 P2709 小B的询问
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12026152.html
Copyright © 2011-2022 走看看