### 模塊級函數
你不一定要產生一個 `RegexObject` 對象然后再調用它的方法;re 模塊也提供了頂級函數調用如 match()、search()、sub() 等等。這些函數使用 RE 字符串作為第一個參數,而后面的參數則與相應 `RegexObject` 的方法參數相同,返回則要么是 None 要么就是一個 `MatchObject` 的實例。
```
#!python
>>> print re.match(r'From\s+', 'Fromage amk')
None
>>> re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')
<re.MatchObject instance at 80c5978>
```
Under the hood, 這些函數簡單地產生一個 RegexOject 并在其上調用相應的方法。它們也在緩存里保存編譯后的對象,因此在將來調用用到相同 RE 時就會更快。
你將使用這些模塊級函數,還是先得到一個 `RegexObject` 再調用它的方法呢?如何選擇依賴于怎樣用 RE 更有效率以及你個人編碼風格。如果一個 RE 在代碼中只做用一次的話,那么模塊級函數也許更方便。如果程序包含很多的正則表達式,或在多處復用同一個的話,那么將全部定義放在一起,在一段代碼中提前編譯所有的 REs 更有用。從標準庫中看一個例子,這是從 xmllib.py 文件中提取出來的:
```
#!python
ref = re.compile( ... )
entityref = re.compile( ... )
charref = re.compile( ... )
starttagopen = re.compile( ... )
```
我通常更喜歡使用編譯對象,甚至它只用一次,但很少人會像我這樣做(如同一個純粹主義者)。