Skip to content

Commit 33a5fb0

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 19e7a5e + e88bc1b commit 33a5fb0

6 files changed

+14
-14
lines changed

source/c07/p10_carry_extra_state_with_callback_functions.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
因此,请求执行和处理结果之间的执行环境实际上已经丢失了。如果你想让回调函数连续执行多步操作,
124124
那你就必须去解决如何保存和恢复相关的状态信息了。
125125

126-
至少有两种主要方式来捕获和保存状态信息,你可以在一个对象实例(通过一个绑定方法)或者砸一个闭包中保存它
126+
至少有两种主要方式来捕获和保存状态信息,你可以在一个对象实例(通过一个绑定方法)或者在一个闭包中保存它
127127
两种方式相比,闭包或许是更加轻量级和自然一点,因为它们可以很简单的通过函数来构造。
128128
它们还能自动捕获所有被使用到的变量。因此,你无需去担心如何去存储额外的状态信息(代码中自动判定)。
129129

source/c08/p03_make_objects_support_context_management_protocol.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
conn = LazyConnection(('www.python.org', 80))
101101
with conn as s1:
102102
pass
103-
with conn as s2:
103+
with conn as s2:
104104
pass
105105
# s1 and s2 are independent sockets
106106

source/c08/p12_define_interface_or_abstract_base_class.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
----------
1313
解决方案
1414
----------
15-
使用 ``abs`` 模块可以很轻松的定义抽象基类:
15+
使用 ``abc`` 模块可以很轻松的定义抽象基类:
1616

1717
.. code-block:: python
1818

source/c08/p21_implementing_visitor_pattern.rst

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
============================
2-
8.21 实现观察者模式
2+
8.21 实现访问者模式
33
============================
44

55
----------
@@ -60,7 +60,7 @@
6060
t4 = Add(Number(1), t3)
6161
6262
这样做的问题是对于每个表达式,每次都要重新定义一遍,有没有一种更通用的方式让它支持所有的数字和操作符呢。
63-
这里我们使用观察者模式可以达到这样的目的
63+
这里我们使用访问者模式可以达到这样的目的
6464

6565
.. code-block:: python
6666
@@ -159,7 +159,7 @@
159159
讨论
160160
----------
161161
刚开始的时候你可能会写大量的if/else语句来实现,
162-
这里观察者模式的好处就是通过 ``getattr()`` 来获取相应的方法,并利用递归来遍历所有的节点:
162+
这里访问者模式的好处就是通过 ``getattr()`` 来获取相应的方法,并利用递归来遍历所有的节点:
163163

164164
.. code-block:: python
165165
@@ -184,12 +184,12 @@
184184
def do_HEAD(self, request):
185185
pass
186186
187-
观察者模式一个缺点就是它严重依赖递归,如果数据结构嵌套层次太深可能会有问题,
187+
访问者模式一个缺点就是它严重依赖递归,如果数据结构嵌套层次太深可能会有问题,
188188
有时候会超过Python的递归深度限制(参考 ``sys.getrecursionlimit()`` )。
189189

190190
可以参照8.22小节,利用生成器或迭代器来实现非递归遍历算法。
191191

192-
在跟解析和编译相关的编程中使用观察者模式是非常常见的
192+
在跟解析和编译相关的编程中使用访问者模式是非常常见的
193193
Python本身的 ``ast`` 模块值的关注下,可以去看看源码。
194194
9.24小节演示了一个利用 ``ast`` 模块来处理Python源代码的例子。
195195

source/c08/p22_implementing_visitor_pattern_without_recursion.rst

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
============================
2-
8.22 不用递归实现观察者模式
2+
8.22 不用递归实现访问者模式
33
============================
44

55
----------
66
问题
77
----------
8-
你使用观察者模式遍历一个很深的嵌套树形数据结构,并且因为超过嵌套层级限制而失败。
9-
你想消除递归,并同时保持观察者编程模式
8+
你使用访问者模式遍历一个很深的嵌套树形数据结构,并且因为超过嵌套层级限制而失败。
9+
你想消除递归,并同时保持访问者编程模式
1010

1111
|
1212
1313
----------
1414
解决方案
1515
----------
1616
通过巧妙的使用生成器可以在树遍历或搜索算法中消除递归。
17-
在8.21小节中,我们给出了一个观察者类
17+
在8.21小节中,我们给出了一个访问者类
1818
下面我们利用一个栈和生成器重新实现这个类:
1919

2020
.. code-block:: python
@@ -53,7 +53,7 @@
5353
def generic_visit(self, node):
5454
raise RuntimeError('No {} method'.format('visit_' + type(node).__name__))
5555
56-
如果你使用这个类,也能达到相同的效果。事实上你完全可以将它作为上一节中的观察者模式的替代实现
56+
如果你使用这个类,也能达到相同的效果。事实上你完全可以将它作为上一节中的访问者模式的替代实现
5757
考虑如下代码,遍历一个表达式的树:
5858

5959
.. code-block:: python

source/c09/p19_initializing_class_members_at_definition_time.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
由于元组是不可修改的,所以一旦它们被创建了就不可能对它做任何改变。而 ``__init__()`` 会在实例创建的最后被触发,
9292
这样的话我们就可以做我们想做的了。这也是为什么 ``__new__()`` 方法已经被定义了。
9393

94-
尽管本机很短,还是需要你能仔细研读,深入思考Python类是如何被定义的,实例是如何被创建的,
94+
尽管本节很短,还是需要你能仔细研读,深入思考Python类是如何被定义的,实例是如何被创建的,
9595
还有就是元类和类的各个不同的方法究竟在什么时候被调用。
9696

9797
`PEP 422 <http://www.python.org/dev/peps/pep-0422>`_

0 commit comments

Comments
 (0)