with上下文管理协议
2024-09-24 16:58:44
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', '']
初始化一个人.....小明
小明工作30年
------------------
初始化一个人.....小明
出生
小明工作30年
死亡
在某些场景 ,我们就可以使用with上下文管理器去写代码,可以大大的简化代码量!
是不是感觉很牛逼。。。。
不,python中还有一个内置的上下文管理库contextlib, 使用它看起来就更牛逼了,请看下面代码
import contextlib @contextlib.contextmanager
def work():
print("出生")
#yield {}
yield
print("死亡") with work() as w:
print('工作30年.....')
打印结果:
出生
工作30年.....
死亡
最新文章
- linux Mint 安装apache2
- MySQL支持的数据类型(1)( 整数,小点,位)
- 使用Django——安装
- 在Main中定义student的结构体,进行年龄从大到小依次排序录入学生信息。(结构体的用法以及冒泡排序)
- 【QT】ui转代码
- Java 实现导出excel表 POI
- Golang 做的几个跟性能有关的工具
- C#基础--属性 字段
- ActionResult 常见问题
- 基于visual Studio2013解决算法导论之001插入排序
- git push解决办法: ! [remote rejected] master ->; master (pre-receive hook declined)
- Failed to connect to VMware Lookup Service……SSL certificate verification failed
- jvm库对nio的处理
- java对接申通下单接口示例代码
- Hadoop2-HDFS学习笔记之入门(不含YARN及MR的调度功能)
- Tornado学习笔记(二) 路由/post/get传参
- work table a year
- windows上搭建nginx
- 发现Boost官方文档的一处错误(numpy的ndarray)
- Scala学习之路 (六)Scala的类、对象、继承、特质