第 17 章 动态函数

17.1. 深入探讨

我想谈谈名词复数。此外,还有返回其他函数的函数、高级正则表达式和生成器。生成器是 Python 2.3 中的新增功能。但首先,让我们谈谈如何将名词变为复数。

如果您还没有阅读第 7 章,正则表达式,现在是时候了。本章假设您了解正则表达式的基础知识,并将快速深入到更高级的用法。

英语是一种精神分裂症语言,它借鉴了许多其他语言,将单数名词变成复数名词的规则多种多样且复杂。有规则,然后是规则的例外,然后是例外的例外。

如果您在英语国家长大或在正规学校环境中学习英语,您可能熟悉基本规则

  1. 如果一个单词以 S、X 或 Z 结尾,则添加 ES。“Bass”变成“basses”,“fax”变成“faxes”,而“waltz”变成“waltzes”。
  2. 如果一个单词以发音的 H 结尾,则添加 ES;如果它以不发音的 H 结尾,则只添加 S。什么是发音的 H?与其他字母组合在一起发出您可以听到的声音的 H。所以“coach”变成“coaches”,而“rash”变成“rashes”,因为您可以在说它们时听到 CH 和 SH 的发音。但是“cheetah”变成“cheetahs”,因为 H 不发音。
  3. 如果一个单词以听起来像 I 的 Y 结尾,则将 Y 更改为 IES;如果 Y 与元音组合在一起听起来像其他东西,则只添加 S。所以“vacancy”变成“vacancies”,但“day”变成“days”。
  4. 如果所有其他方法都失败,只需添加 S 并抱最好的希望。

(我知道,有很多例外。“Man”变成“men”,而“woman”变成“women”,但“human”变成“humans”。“Mouse”变成“mice”,而“louse”变成“lice”,但“house”变成“houses”。“Knife”变成“knives”,而“wife”变成“wives”,但“lowlife”变成“lowlifes”。更不用说那些本身就是复数的词了,比如“sheep”、“deer”和“haiku”。)

当然,其他语言完全不同。

让我们设计一个模块来将名词复数化。从英语名词开始,只使用这四条规则,但请记住,您不可避免地需要添加更多规则,并且您最终可能需要添加更多语言。