之前一直在分享PHP的代码,今天有一位小朋友问我,能不能用通俗易懂的方法解释一下Python的一些晦涩难懂的语法。TA说别人都说Python最好学,但真正学起来也发现看不懂的地方超级多,越学越沮丧。
TA问的是:with... as...
如:
with open("demo.txt") as file: data = file.read()`
这段代码的作用就是读取demo.txt文件中的数据,然后关掉demo.txt文件。
这就是这位小朋友不懂的地方了,TA说整个语句只看到了open,没有看到close啊。
确实如此。如果TA想看到TA希望看到的,就是这样的:
file = open("demo.txt") data = file.read() file.close()
这下子是不是就很自然,你打开了一个文件,并把这个文件放到file变量中,然后用read()函数读取文件中的内容,把内容放到data变量中,然后再使用close()函数关掉file变量,也就是关掉文件。
这个时候你就想问:为啥要关掉文件?
你可能看代码并不觉得为什么要关掉文件,但是你在自己电脑操作文件时,是不是要把不用的文件关掉?
那既然要关掉文件,那为什么with ... as...语句中看不到close()函数呢?
答案就是:怕你忘了写close()函数,所以当你决定要读取一个文件时,with... as...语句就记着要给你关掉那个文件。
要知道,读文件时还不能保证文件一定能成功读取呢,万一读错了怎么办?是不是还要写段代码说明读错了之后的处理办法?
这些也都被with... as...语句给包含进去了。
我找了一段英文解释:with statement in Python is used in exception handling to make the code cleaner and much more readable.
来源:https://www.geeksforgeeks.org/with-statement-in-python/
有时候会发现英文一句话就把事情解释清楚了。
不过我给这位小朋友解释完之后TA说还不懂,主要是不懂with... as..这种用法。
这个问题就把我难住了,我自己倒这没有想过这里的with是个什么意思,如果去查牛津词典,发现with的意思有:
和...在一起 与...同一方向 (时间)随着,同时 有 穿着,戴着 用;借助 反对,对立 由...处理 对,对于 用...的服务 由于 受...影响 与..分离
我仔细看了一下,觉得如果真要从这些用法里找一个硬套的话,就是随着,同时(along with)
with open("demo.txt") as file的意思就是:
打开demo.tx文件的同时,将其命名为file。
这样确实很牵强,但我给TA讲了之后,TA立刻说,这下明白了。
我自己反而很疑惑,自己差点给整蒙了,因为我之前确实没有想过这个with是啥意思。
这个答疑的体验很有趣,分享给大家。
作者:韩林涛,北京语言大学高级翻译学院教师,《译者编程入门指南》作者