python中的with与上下文管理器
2024-08-29 16:12:54
#转载请留言联系
很多人平时需要打开文件进行读取写入操作时,通常这样:
f = open('文件路径','w')
f.write(data)
f.close
这样写有一个潜在的问题,如果在调用 write 的过程中,出现了异常进而导致后续代码无法继续执行,close 方法无法被正常调用,因此资源就会一直被该程序占用者释放。那么该如何改进代码呢?
对于系统资源如文件、数据库连接、socket 而言,应用程序打开这些资源并执行完业务逻辑之后,必须做的一件事就是要关闭(断开)该资源。
比如 Python 程序打开一个文件,往文件中写内容,写完之后,就要关闭该文件,否则会出现什么情况呢?极端情况下会出现 "Too many open files" 的错误,因为系统允许你打开的最大文件数量是有限的。总之,能够将打开使用的资源 进行自动关闭是一个非常不错的手段。
那么,怎么才能在不需要的时候自动关闭呢?很简单,用with。
with open('文件路径','w') as f
f.write(data)
with的原理到底是什么呢?怎么这么神奇?
其实它是通过上下文管理器实现这么一个功能的。
上下文管理器是什么东西呢?其实上下文管理器和迭代器有点相似。任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器 ,上下文管理器可以使用with简化操作。
现在来写一个实现文件自动关闭的上下文管理器~
class File():
def __init__(self,file_name,mode):
self.file_name = file_name
self.mode = mode def __enter__(self):
"""上文"""
self.file_name = open(self.file_name,self.mode)
return self.file_name def __exit__(self, exc_type, exc_val, exc_tb):
"""下文"""
self.file_name.close() with File('./one.txt','w') as f: #正文
f.write("大家好")
“上文”和“下文”对应类中的__enter__和__exit__函数。“正文”就是你的文件处理部分啦。
最新文章
- 小白死去活来的安装ros_qtc_plugin
- poj 1466 Girls and Boys(二分图的最大独立集)
- elasticsearch的rest搜索--- 安装
- 大数据Hadoop学习之了解Hadoop(1)
- JS 装饰器解析
- linux系统安装mysql
- IP通信基础课堂笔记----第二章(重点)
- JavaSE学习总结(三)——Java语言编程练习、格式化字符与常量
- hdu1875 畅通工程再续 并查集/最小生成树
- Python相关在线文档手册地址
- BZOJ3996:[TJOI2015]线性代数(最大权闭合子图)
- Android学习之AutoCompleteTextView
- PhoneGap安装配置
- 2016.6.19——C++杂记
- 《Android源码设计模式》----面向对象六大原则
- hdu4565矩阵快速幂
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义【转】
- OpenWrt架设nginx php网站
- 上传web端——个人项目
- SIG蓝牙mesh笔记5_Provisionging