8-17<X17>plural.xml 动态函数
Contents
- 为和前面章节一致,“介绍 XYZ”一律改为“XYZ 介绍”。
17.1 概览
Para 4下, 复数规则介绍, 1.:
If a word ends in S, X, or Z, add ES. "Bass" becomes "basses",...
如果一个词以 S, X, Z, 或者 ES 结尾,“Bass” 变成 “basses”,……
如果一个词以 S, X 或 Z 结尾,加 ES。如 “Bass” 变成 “basses”,……
同上, 2.:If a word ends in a noisy H, add ES; if it ends in a silent H, just add S.
如果一个词以发音的 H 加 ES 结尾,或以不发音的 H 加 S 结尾。
如果一个词以发音的 H 结尾,加 ES;若以不发音的 H 结尾,加 S。
17.2 plural.py, 第 1 阶段
Para 1:你所针对的单词,至少在英语中是字符串和字符。另外你需要规则来找出不同的字符(字母)组合,并对他们进行不同的操作。
你所针对的单词(至少在英语中)是字符串和字符。你还需要规则来找出不同的字符(字母)组合,并对它们进行不同的操作。
例17.1, (2):re.sub 函数起着
以正则表达式为基础的替换工作。让我们更具体地看看它。
进行
例17.5, (1):正则表达式把 vacancy 变为 vacancies,把 agency 变为 agencies
,这正是你想要的。
17.3 plural.py, 第 2 阶段
例17.6, (3):rules 包含函数:不是指函数名,而是指函数本身。当他们被赋予给 for 循环中,matchesRule 和 applyRule 就成了你可以调用的真正函数。
当 matchesRule 和 applyRule 在 for 循环中被赋值后,它们就成了你可以调用的真正函数。
17.4 plural.py, 第 3 阶段
pass
17.5 plural.py, 第 4 阶段
例17.9, (1):buildMatchAndApplyFunctions is a function that builds other functions dynamically. It takes pattern, search and replace (actually it takes a tuple, but more on that in a minute)...
buildMatchAndApplyFunctions 是一个动态生成其它函数的函数。它将 pattern,search 和 replace (实际上是一个元组,但很快就会变得不止于此)
我们很快就会提到这一点
例17.9, (2):你实际上是在应用规则函数中定义常数:接受一个参数(word),但随后它与定义应用规则函数时设置的另外两个值 (search 和 replace)一起工作。
你实际上是在应用规则函数中定义常量:它只接受一个参数(word),但用到了定义时设置的两个值 (search 和 replace)。例17.9, (3):最终,buildMatchAndApplyFunctions 函数返回一个包含两个值的元组:你刚刚创建的两个函数。你在这些函数中定义的
常量(matchFunction 中的 pattern 以及 applyFunction 中的 search 和 replace)保留在这些函数中,……
例17.13, (1):注意到双括号了吗?这个函数并不是真的接受三个参数,实际上只接受一个参数:一个三元素元组。但是在函数被调用时元组概念
被展开了,元组的三个元素也被赋予了不同的变量……
Para -1:Using map to map a single list onto a function always calls the function with a single parameter: each element of the list. In the case of patterns, each element of the list is a tuple, so buildMatchAndApplyFunctions always gets called with the tuple,...
使用 map 映射一个列表到函数时,通常使用单参数:列表中的每个元素。就 patterns 而言,列表的每个元素都是一个元组,所以 buildMatchAndApplyFunctions 经常是以元组来调用,总是
17.6 plural.py, 第 5 阶段
Para 1:First, let's create a text file that contains the rules you want. No fancy data structures, just space- (or tab-)delimited strings in three columns.
首先,让我们建立一个包含所有你需要的规则的文本文件。没有什么特别的结构,不过是以空白(或者制表符)把字符串列成三列。
空格
例17.16, (1):You're still using the closures technique here (building a function dynamically that uses variables defined outside the function), but now you've combined the separate match and apply functions into one. (The reason for this change will become clear in the next section.) This will let you accomplish the same thing as having two functions, but you'll need to call it differently, as you'll see in a minute.
在这里你还将使用闭合技术(动态构建函数时使用函数外部定义的变量),但是现在你把原来分开的匹配函数和规则应用函数合二为一。(你将在下一节中明了其原因) 你很快会看到,这与分别调用两个函数效果相同。
在这里你还将使用闭合技术(动态构建函数时使用函数外部定义的变量),但是现在你把原来分开的匹配函数和规则应用函数合二为一(你将在下一节中明了其原因)。你很快会看到,这与分别调用两个函数效果相同,只是调用的方法稍有不同。
例17.16, (5):当返回的函数被调用,则将执行 re.search('[sxz]$', word) 和 re.sub('$', 'es', word)。
当返回的函数被调用,则将执行 re.search('[sxz]$', word) and re.sub('$', 'es', word)。
17.7 plural.py, 第 6 阶段
例17.18, (1):make_counter 中出现关键字 yield 意味着这不是一个普通的函数。它是一种每次生成一个值的特殊函数。你可以把它看成是一个可恢复函数。调用它会返回一个生成器,它可以返回 x 的连续
值。
例17.19下:So you have a function that spits out successive Fibonacci numbers. Sure, you could do that with recursion, but this way is easier to read.
这样你就有了成功生成 Fibonacci 数的函数了。当然你也可以通过递归做到,但是这里的方法更加容易和理解。
这样你就有了生成连续的 Fibonacci 数的函数了。然你也可以通过递归做到,但是这里的方法更加易读。
例17.20, (1):for 循环将会创建一个生成器对象并成功
调用其 next() 方法获得值并赋予 for 循环变量(n)。
连续
17.8 小结
pass