17.4. plural.py, 第 3 阶段

将每个匹配和规则应用分别制作成函数没有必要。你从来不会直接调用它们:你把它们定义于 rules 列表之中并从那里调用它们。让我们隐去它们的函数名而抓住规则定义的主线。

例 17.8. plural3.py


import re

rules = \
  (
    (
     lambda word: re.search('[sxz]$', word),
     lambda word: re.sub('$', 'es', word)
    ),
    (
     lambda word: re.search('[^aeioudgkprt]h$', word),
     lambda word: re.sub('$', 'es', word)
    ),
    (
     lambda word: re.search('[^aeiou]y$', word),
     lambda word: re.sub('y$', 'ies', word)
    ),
    (
     lambda word: re.search('$', word),
     lambda word: re.sub('$', 's', word)
    )
   )                                           

def plural(noun):                             
    for matchesRule, applyRule in rules:       
        if matchesRule(noun):                 
            return applyRule(noun)            
这与第 2 阶段定义的规则是一样的。惟一的区别是不再定义 match_sxzapply_sxz 之类的函数,时时彩计划软件公式:而是以 lambda 函数 法将这些函数的内容直接 “嵌入rules 列表本身。
注意 plural 函数完全没有变化,还是反复于一系列的规则函数,检查第一个匹配规则,如果返回真则调用第二个应用规则并返回值。和前面一样,给定单词返回单词。唯一的区别是规则函数被内嵌定义,化名作 lambda 函数。但是 plural 函数并不在乎它们是如何定义的,只是拿到规则列表,闭着眼睛干活。

现在添加一条新的规则,所有你要做的就是直接在 rules 列表之中定义函数:一个匹配规则,一个应用规则。这样内嵌的规则函数定义方法使得没必要的重复很容易被发现。你有四对函数,它们采用相同的模式。匹配函数就是调用 re.search,应用函数就是调用 re.sub。让我们提炼出这些共同点。

时时彩手机计划软件 新时时彩大小单双遗漏 重庆时时彩销售点地址 时时彩判断组三 2013魅影时时彩软件
世爵时时彩平台 时时彩自动挂机平台 飞腾时时彩工作室 月亮岛购彩平台下载 江西福彩网
江西时时彩会不会停售 重庆时时彩代理点 时时彩软件定制工作室 时时彩平台要多少钱 江西时时彩澳客
台湾时时彩走势图网址 重庆时时彩后三单双走势 江西时时彩怎么玩的 时时彩计划软件网页版 黄金计划王4.2手机版
贵州十一选五任三遗漏 快赢481走势图 亿万老婆买一送一txt下载 安徽快三遗漏分析 快乐双彩最新开奖结果
pk10北京赛车 贵州福彩快三开奖结果 山东十一选五稳赚玩法?﹤计划﹥ 扑克21点怎么玩 海南飞鱼游戏彩票控
陕西十一选五遗漏一定牛 麻将二八杠图片 贵州十一选五帮手 北京赛车808a 甘肃快三预测号码225
陕西十一选五任一最大遗漏 山东快乐扑克3中奖规则 pk10杀号软件 河南快三 真钱棋牌斗牛