Skip to content

Commit 430b481

Browse files
committed
Merge pull request qiwsir#49 from 3rogue/patch-1
Update 235.md
2 parents 493a476 + ebe5236 commit 430b481

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

235.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
#上下文管理器
44

5-
[《文件(1)》](./126.md)中提到,如果要打开文件,一种比较好的方法使使用`with`语句,因为这种方法,不仅结构简单,更重要的是不用再单独去判断某种异常情况,也不用专门去执行文件关闭的指令了。
5+
[《文件(1)》](./126.md)中提到,如果要打开文件,一种比较好的方法是使用`with`语句,因为这种方法,不仅结构简单,更重要的是不用再单独去判断某种异常情况,也不用专门去执行文件关闭的指令了。
66

77
本节对这个有点神奇的`with`进行深入剖析。
88

@@ -14,21 +14,21 @@
1414

1515
如果把它作为一个概念来阐述,似乎有点多余,因为从字面上也可以有一丝的体会,但是,我要说的是,那点直觉的体会不一定等于理性的严格定义,特别是周遭事物越来越复杂的时候。
1616

17-
“上下文”的英文是context,在网上检索了一下关于“上下文”的说法,发现没有什么严格的定义,另外,不同的语言环境,对“上下文管理”有不同的说法。根据我个人的经验和能看到的某些资料,我以为可以把“上下文”理解为某一些语句构成的一个环境(也可以说使代码块),所谓“管理”就是要在这个环境中做一些事情,做什么事情呢?就Python而言,是要将前面某个语句(“上文”)干的事情独立成为对象,然后在后面(“下文”)中使用这个对象来做事情。
17+
“上下文”的英文是context,在网上检索了一下关于“上下文”的说法,发现没有什么严格的定义,另外,不同的语言环境,对“上下文管理”有不同的说法。根据我个人的经验和能看到的某些资料,我以为可以把“上下文”理解为某一些语句构成的一个环境(也可以说是代码块),所谓“管理”就是要在这个环境中做一些事情,做什么事情呢?就Python而言,是要将前面某个语句(“上文”)干的事情独立成为对象,然后在后面(“下文”)中使用这个对象来做事情。
1818

1919
**上下文管理协议**
2020

21-
英文是Context Management Protocol,既然使协议,就应该是包含某些方法的东西,大家都按照这个去做(协商好了的东西)。Python中的上下文管理协议中必须包含`__enter__()``__exit__()`两个方法。
21+
英文是Context Management Protocol,既然是协议,就应该是包含某些方法的东西,大家都按照这个去做(协商好了的东西)。Python中的上下文管理协议中必须包含`__enter__()``__exit__()`两个方法。
2222

2323
看这个两个方法的名字,估计读者也能领悟一二了(名字不是随便取的,这个某个岛国取名字的方法不同,当然,现在人家也不是随便取了)。
2424

2525
**上下文管理器**
2626

27-
网上能够找到的最通常的说法是:上下文管理器使支持上下文管理协议的对象,这种对象实现了`__enter__()``__exit__()`方法。
27+
网上能够找到的最通常的说法是:上下文管理器是支持上下文管理协议的对象,这种对象实现了`__enter__()``__exit__()`方法。
2828

29-
这个简洁而准确的定义,一般情况下一些高手使理解了。如果读者有疑惑,就说明...,我还是要把一个高雅的定义通俗化更好一些。
29+
这个简洁而准确的定义,一般情况下一些高手是理解了。如果读者有疑惑,就说明...,我还是要把一个高雅的定义通俗化更好一些。
3030

31-
在Python中,下面的语句,也存在上下文,但它们使一气呵成执行的
31+
在Python中,下面的语句,也存在上下文,但它们是一气呵成执行的
3232

3333
>>> name = "laoqi"
3434
>>> if name == "laoqi":
@@ -58,7 +58,7 @@
5858

5959
##必要性
6060

61-
刚才那个向文件中写入hello和python两个单词的示例,如果你觉得在工程中也可以这样做,就大错特错了。因为它存在隐含的问题,比如在写入了hello之后,不知道什么原因,后面的python不能写入了,最能说服你的是恰好遇到了“磁盘已满”——虽然这种情况的概率可能比抓奖券还还小,但作为严禁的程序员,使必须要考虑的,这也是程序复杂之原因,这时候后面的操作就出现了异常,无法执行,文件也不能close。解决这个问题的方法使用`try ... finally ...`语句,读者一定能写出来。
61+
刚才那个向文件中写入hello和python两个单词的示例,如果你觉得在工程中也可以这样做,就大错特错了。因为它存在隐含的问题,比如在写入了hello之后,不知道什么原因,后面的python不能写入了,最能说服你的是恰好遇到了“磁盘已满”——虽然这种情况的概率可能比抓奖券还还小,但作为严禁的程序员,是必须要考虑的,这也是程序复杂之原因,这时候后面的操作就出现了异常,无法执行,文件也不能close。解决这个问题的方法是用`try ... finally ...`语句,读者一定能写出来。
6262

6363
不错,的确解决了。
6464

@@ -329,4 +329,4 @@ contextlib.contextmanager是一个装饰器,它作用于生成器函数(也
329329

330330
[总目录](./index.md)   |   [上节:生成器](./215.md)   |   [下节:错误和异常(1)](./216.md)
331331

332-
如果你认为有必要打赏我,请通过支付宝:**[email protected]**,不胜感激。
332+
如果你认为有必要打赏我,请通过支付宝:**[email protected]**,不胜感激。

0 commit comments

Comments
 (0)