Medium Python终于来到了最终话。经历了前四话的撰写,笔者决定以第五话作为收尾,故这段时间一直在思考python里还有什么内容是我们常见但值得推敲且有应用意义的点。绞尽脑汁,最终得到了今天这个主题:with
关键字。
with
关键字的含义,是笔者接触python以来希望彻底搞懂的问题之一,也是一定会困惑大量玩python的同学的问题之一。相信每一个玩过python的同学都接触过with
语法,比如with open(xxx) as f
的文件操作,或者是with lock
这样的加解锁操作,这些东西每个python教程里都有。但是with
语法具体表示什么,具体能够翻译成怎样的简单语法,基本没啥人能够说的清楚,说的科学。即便在网上有许多文章在剖析这一点,提到了许多诸如“上下文管理(context manager
)”、“异常处理”、“__enter__
、__exit__
”之类的词汇,但是就正因为缺少些硬核的东西,比如源码分析,导致许多个文章的内容都很水,看了也不能完完全全的明白,实际写代码的时候也觉得难以彻底掌握。
因此,为了把这件事情说明白,本文决定继续源码分析的套路,让大伙儿彻底理解with
关键字是怎么一回事。老样子,一切的吹水都没有源码分析来的实在。看完这篇文章,其它关于with
的文章都可以统统无视了。
with代码测试
首先我们上一段测试代码: