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年.....
死亡