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

最新文章

  1. linux Mint 安装apache2
  2. MySQL支持的数据类型(1)( 整数,小点,位)
  3. 使用Django——安装
  4. 在Main中定义student的结构体,进行年龄从大到小依次排序录入学生信息。(结构体的用法以及冒泡排序)
  5. 【QT】ui转代码
  6. Java 实现导出excel表 POI
  7. Golang 做的几个跟性能有关的工具
  8. C#基础--属性 字段
  9. ActionResult 常见问题
  10. 基于visual Studio2013解决算法导论之001插入排序
  11. git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)
  12. Failed to connect to VMware Lookup Service……SSL certificate verification failed
  13. jvm库对nio的处理
  14. java对接申通下单接口示例代码
  15. Hadoop2-HDFS学习笔记之入门(不含YARN及MR的调度功能)
  16. Tornado学习笔记(二) 路由/post/get传参
  17. work table a year
  18. windows上搭建nginx
  19. 发现Boost官方文档的一处错误(numpy的ndarray)
  20. Scala学习之路 (六)Scala的类、对象、继承、特质

热门文章

  1. 用Vue来实现音乐播放器(十五):处理得到的歌手数据
  2. 【win Server】 那些天建立群集和SQL AlwaysOn踩到的雷……
  3. java实现多种加密模式的AES算法-总有一种你用的着
  4. VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计
  5. truncate()函数
  6. 3 深入解析controlfile
  7. vue组件生命周期
  8. 【ABAP系列】SAP LSMW(摘自官网)
  9. 【sql server复制】不重新初始化快照的情况下新增表/存储过程/函数等
  10. LCD应用程序测试