<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 17.3.?`plural.py`, 第 2 階段 現在你將增加一個抽象過程。你從定義一個規則列表開始:如果這樣,就做那個,否則判斷下一規則。讓我們暫時將程序一部分復雜化以便使另一部分簡單化。 ## 例?17.6.?`plural2.py` ``` import re def match_sxz(noun): return re.search('[sxz]$', noun) def apply_sxz(noun): return re.sub('$', 'es', noun) def match_h(noun): return re.search('[^aeioudgkprt]h$', noun) def apply_h(noun): return re.sub('$', 'es', noun) def match_y(noun): return re.search('[^aeiou]y$', noun) def apply_y(noun): return re.sub('y$', 'ies', noun) def match_default(noun): return 1 def apply_default(noun): return noun + 's' rules = ((match_sxz, apply_sxz), (match_h, apply_h), (match_y, apply_y), (match_default, apply_default) ) def plural(noun): for matchesRule, applyRule in rules: if matchesRule(noun): return applyRule(noun) ``` | | | | --- | --- | | \[1\] | 這個版本看起來更加復雜 (至少是長了),但做的工作沒有變化:試圖順序匹配四種不同規則,并在匹配時應用恰當的正則表達式。不同之處在于,每個獨立的匹配和應用規則都在自己的函數中定義,并且這些函數列于 `rules` 變量這個元組的元組之中。 | | \[2\] | 使用一個 `for` 循環,你可以根據 `rules` 元組一次性進行匹配和應用規則兩項工作 (一個匹配和一個應用)。`for` 循環第一輪中,`matchesRule` 將使用 `match_sxz`,`applyRule` 將使用 `apply_sxz`;在第二輪中 (假設真走到了這么遠),`matchesRule` 將被賦予 `match_h`,`applyRule` 將被賦予 `apply_h`。 | | \[3\] | 記住 [Python 中的一切都是對象](../getting_to_know_python/everything_is_an_object.html "2.4.?萬物皆對象"),包括函數。`rules` 包含函數;不是指函數名,而是指函數本身。當 `matchesRule` 和 `applyRule` 在 `for` 循環中被賦值后,它們就成了你可以調用的真正函數。因此,在 `for` 循環第一輪中,這就相當于調用 `matches_sxz(noun)`。 | | \[4\] | 在 `for` 循環第一輪中,這就相當于調用 `apply_sxz(noun)`,等等。 | 這個抽象過程有些令人迷惑,試著剖析函數看看實際的等價內容。這個 `for` 循環相當于: ## 例?17.7.?剖析 `plural` 函數 ``` def plural(noun): if match_sxz(noun): return apply_sxz(noun) if match_h(noun): return apply_h(noun) if match_y(noun): return apply_y(noun) if match_default(noun): return apply_default(noun) ``` 這里的好處在于 `plural` 函數現在被簡化了。它以普通的方法反復使用其它地方定義的規則。獲得一個匹配規則,匹配嗎?調用并應用規則。規則可以在任意地方以任意方法定義,`plural` 函數對此并不關心。 現在,添加這個抽象過程值得嗎?嗯……還不值。讓我們看看如何向函數添加一個新的規則。啊哈,在先前的范例中,需要向 `plural` 函數添加一個 `if` 語句;在這個例子中,需要增加兩個函數:`match_foo` 和 `apply_foo`,然后更新 `rules` 列表指定在什么相對位置調用這個新匹配和新規則應用。 這其實不過是步入下一節的一個基石。讓我們繼續。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看