韩林涛老师:译者编程知识30天×300字写作计划 | Day 20

之前一直在分享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是啥意思。

这个答疑的体验很有趣,分享给大家。

作者:韩林涛,北京语言大学高级翻译学院教师,《译者编程入门指南》作者