Skip to content

Commit 7a48aa8

Browse files
committed
Merge pull request yidao620c#30 from robertding/master
代码高亮错误,一些标点错误和表述错误
2 parents 02b0f37 + deee5f3 commit 7a48aa8

11 files changed

+24
-25
lines changed

source/c06/p01_read_write_csv_data.rst

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
----------
1313
解决方案
1414
----------
15-
对于大多数的CSV格式的数据读写问题,都可以使用 ``csv`` 库。
16-
例如假设你在一个名叫stocks.csv文件中有一些股票市场数据,就像这样:
15+
对于大多数的CSV格式的数据读写问题,都可以使用 ``csv`` 库。
16+
例如假设你在一个名叫stocks.csv文件中有一些股票市场数据,就像这样:
1717

18-
.. code-block::
18+
.. code-block:: python
1919
2020
Symbol,Price,Date,Time,Change,Volume
2121
"AA",39.48,"6/11/2007","9:36am",-0.18,181800
@@ -37,8 +37,7 @@
3737
# Process row
3838
...
3939
40-
在上面的代码中,``row`` 会是一个元组。因此,为了访问某个字段,你需要使用下标,如row[0]访问Symbol,
41-
row[4]访问Change。
40+
在上面的代码中, ``row`` 会是一个元组。因此,为了访问某个字段,你需要使用下标,如 ``row[0]`` 访问Symbol, ``row[4]`` 访问Change。
4241

4342
由于这种下标访问通常会引起混淆,你可以考虑使用命名元组。例如:
4443

@@ -71,7 +70,7 @@ row[4]访问Change。
7170
7271
在这个版本中,你可以使用列名去访问每一行的数据了。比如,``row['Symbol']`` 或者 ``row['Change']`` 。
7372

74-
为了写入CSV数据,你仍然可以使用csv模块,不过这时候先创建一个 ``writer`` 对象。例如;
73+
为了写入CSV数据,你仍然可以使用csv模块,不过这时候先创建一个 ``writer`` 对象。例如:
7574

7675
.. code-block:: python
7776

source/c06/p02_read-write_json_data.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
3636
data = json.loads(json_str)
3737
38-
如果你要处理的是文件而不是字符串,你可以使用json.dump()和json.load()来编码和解码JSON数据。例如:
38+
如果你要处理的是文件而不是字符串,你可以使用 ``json.dump()`` 和 ``json.load()`` 来编码和解码JSON数据。例如:
3939

4040
.. code-block:: python
4141
@@ -52,7 +52,7 @@
5252
----------
5353
讨论
5454
----------
55-
JSON编码支持的基本数据类型为None,boolint,float和str
55+
JSON编码支持的基本数据类型为 ``None`` , ``bool`` , ``int`` , ``float`` 和 ``str``
5656
以及包含这些类型数据的lists,tuples和dictionaries。
5757
对于dictionaries,keys需要是字符串类型(字典中任何非字符串类型的key在编码时会先转换为字符串)。
5858
为了遵循JSON规范,你应该只编码Python的lists和dictionaries。

source/c06/p03_parse_simple_xml_data.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
讨论
6868
----------
6969
在很多应用程序中处理XML编码格式的数据是很常见的。
70-
不仅是因为XML在Internet上面已经被广泛应用于数据交换
70+
不仅因为XML在Internet上面已经被广泛应用于数据交换
7171
同时它也是一种存储应用程序数据的常用格式(比如字处理,音乐库等)。
7272
接下来的讨论会先假定读者已经对XML基础比较熟悉了。
7373
@@ -139,4 +139,4 @@
139139
对于更高级的应用程序,你需要考虑使用 ``lxml``
140140
它使用了和ElementTree同样的编程接口,因此上面的例子同样也适用于lxml。
141141
你只需要将刚开始的import语句换成 ``from lxml.etree import parse`` 就行了。
142-
``lxml`` 完全遵循XML标准,并且速度也非常快,同时还支持验证,XSLT和XPath等特性
142+
``lxml`` 完全遵循XML标准,并且速度也非常快,同时还支持验证,XSLT,和XPath等特性

source/c06/p04_parse_huge_xml_files_incrementally.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@
159159
160160
``start`` 事件在某个元素第一次被创建并且还没有被插入其他数据(如子元素)时被创建。
161161
而 ``end`` 事件在某个元素已经完成时被创建。
162-
尽管没有在例子中演示,``start-ns`` 和 ``end-ns`` 事件被用来处理XML文档命名空间的声明。
162+
尽管没有在例子中演示, ``start-ns`` 和 ``end-ns`` 事件被用来处理XML文档命名空间的声明。
163163

164-
这本节例子中,``start`` 和 ``end`` 事件被用来管理元素和标签栈。
164+
这本节例子中, ``start`` 和 ``end`` 事件被用来管理元素和标签栈。
165165
栈代表了文档被解析时的层次结构,
166166
还被用来判断某个元素是否匹配传给函数 ``parse_and_remove()`` 的路径。
167167
如果匹配,就利用 ``yield`` 语句向调用者返回这个元素。

source/c06/p08_interact_with_relational_database.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Python中表示多行数据的标准方式是一个由元组构成的序列。
7474
('HPQ', 75, 33.2)
7575
>>>
7676
77-
如果你想接受用户输入作为参数来执行查询操作,必须确保你使用下面这样的占位符?来进行引用参数:
77+
如果你想接受用户输入作为参数来执行查询操作,必须确保你使用下面这样的占位符``?``来进行引用参数:
7878

7979
.. code-block:: python
8080
@@ -103,9 +103,9 @@ Python中表示多行数据的标准方式是一个由元组构成的序列。
103103
另外一个更加复杂的问题就是SQL语句字符串的构造。
104104
你千万不要使用Python字符串格式化操作符(如%)或者 ``.format()`` 方法来创建这样的字符串。
105105
如果传递给这些格式化操作符的值来自于用户的输入,那么你的程序就很有可能遭受SQL注入攻击(参考 http://xkcd.com/327 )。
106-
查询语句中的通配符指示后台数据库使用它自己的字符串替换机制,这样更加的安全。
106+
查询语句中的通配符 ``?`` 指示后台数据库使用它自己的字符串替换机制,这样更加的安全。
107107

108-
不幸的是,不同的数据库后台对于通配符的使用是不一样的。大部分模块使用?或%s
108+
不幸的是,不同的数据库后台对于通配符的使用是不一样的。大部分模块使用 ``?`` 或 ``%s``
109109
还有其他一些使用了不同的符号,比如:0或:1来指示参数。
110110
同样的,你还是得去参考你使用的数据库模块相应的文档。
111111
一个数据库模块的 ``paramstyle`` 属性包含了参数引用风格的信息。

source/c06/p11_read_write_binary_arrays_of_structures.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@
9090
结构体通常会使用一些结构码值i, d, f等
9191
[参考 `Python文档 <https://docs.python.org/3/library/struct.html>`_ ]。
9292
这些代码分别代表某个特定的二进制数据类型如32位整数,64位浮点数,32位浮点数等。
93-
第一个字符<指定了字节顺序。在这个例子中,它表示"低位在前"。
94-
更改这个字符为>表示高位在前,或者是!表示网络字节顺序。
93+
第一个字符 ``<`` 指定了字节顺序。在这个例子中,它表示"低位在前"。
94+
更改这个字符为 ``>`` 表示高位在前,或者是 ``!`` 表示网络字节顺序。
9595

9696
产生的 ``Struct`` 实例有很多属性和方法用来操作相应类型的结构。
9797
``size`` 属性包含了结构的字节数,这在I/O操作时非常有用。
@@ -144,7 +144,7 @@
144144
>>>
145145
146146
如你所见,创建一个可迭代对象的一个原因是它能允许使用一个生成器推导来创建记录。
147-
如果你不适用这种技术,那么代码可能会像下面这样:
147+
如果你不使用这种技术,那么代码可能会像下面这样:
148148

149149
.. code-block:: python
150150

source/c07/p08_make_callable_with_fewer_arguments.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
在这个例子中,``__init__()`` 方法中的ack参数声明方式看上去很有趣,其实就是声明ack为一个强制关键字参数。
165165
关于强制关键字参数问题我们在7.2小节我们已经讨论过了,读者可以再去回顾一下。
166166

167-
很多时候``partial()``能实现的效果,lambda表达式也能实现。比如,之前的几个例子可以使用下面这样的表达式:
167+
很多时候 ``partial()`` 能实现的效果,lambda表达式也能实现。比如,之前的几个例子可以使用下面这样的表达式:
168168

169169
.. code-block:: python
170170

source/c07/p11_inline_callback_functions.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,6 @@
131131
实际上你会发现这个真的就是这样的,但是要解释清楚具体的控制流得需要点时间了。
132132

133133
将复杂的控制流隐藏到生成器函数背后的例子在标准库和第三方包中都能看到。
134-
比如,在``contextlib`` 中的 ``@contextmanager`` 装饰器使用了一个令人费解的技巧,
134+
比如,在 ``contextlib`` 中的 ``@contextmanager`` 装饰器使用了一个令人费解的技巧,
135135
通过一个 ``yield`` 语句将进入和离开上下文管理器粘合在一起。
136136
另外非常流行的 ``Twisted`` 包中也包含了非常类似的内联回调。

source/c08/p03_make_objects_support_context_management_protocol.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
----------
1313
解决方案
1414
----------
15-
为了让一个对象兼容 ``with`` 语句,你需要实现 ``__enter()__`` 和 ``__exit__()`` 方法。
15+
为了让一个对象兼容 ``with`` 语句,你需要实现 ``__enter__()`` 和 ``__exit__()`` 方法。
1616
例如,考虑如下的一个类,它能为我们创建一个网络连接:
1717

1818
.. code-block:: python

source/c08/p06_create_managed_attributes.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ property的一个关键特征是它看上去跟普通的attribute没什么两样
6161
>>> del a.first_name
6262
Traceback (most recent call last):
6363
File "<stdin>", line 1, in <module>
64-
AttributeError: can't delete attribute
64+
AttributeError: can`t delete attribute
6565
>>>
6666
6767
在实现一个property的时候,底层数据(如果有的话)仍然需要存储在某个地方。
68-
因此,在get和set方法中,你会看到对 ``_first_name``属性的操作,这也是实际数据保存的地方。
68+
因此,在get和set方法中,你会看到对 ``_first_name`` 属性的操作,这也是实际数据保存的地方。
6969
另外,你可能还会问为什么 ``__init__()`` 方法中设置了 ``self.first_name`` 而不是 ``self._first_name`` 。
7070
在这个例子中,我们创建一个property的目的就是在设置attribute的时候进行检查。
7171
因此,你可能想在初始化的时候也进行这种类型检查。通过设置 ``self.first_name`` ,自动调用 ``setter`` 方法,

source/c08/p07_calling_method_on_parent_class.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
print('B.spam')
2626
super().spam() # Call parent spam()
2727
28-
``super()``函数的一个常见用法是在 ``__init__()`` 方法中确保父类被正确的初始化了:
28+
``super()`` 函数的一个常见用法是在 ``__init__()`` 方法中确保父类被正确的初始化了:
2929

3030
.. code-block:: python
3131
@@ -67,7 +67,7 @@
6767
----------
6868
讨论
6969
----------
70-
实际上,大家对于在Python中如何正确使用 ``super()`` 函数普遍都知之甚少
70+
实际上,大家对于在Python中如何正确使用 ``super()`` 函数普遍知之甚少
7171
你有时候会看到像下面这样直接调用父类的一个方法:
7272

7373
.. code-block:: python

0 commit comments

Comments
 (0)