深度說明Python 源文件性質(zhì)
對于Python 源文件的學(xué)習(xí),個人認為先要從Python的概念學(xué)起,其實Python 就是一種面向?qū)ο?、直譯式計算機程序設(shè)計語言,也是一種功能強大而完善的通用型語言,而且非常易于初學(xué)者學(xué)習(xí)。
先介紹一個只編譯 Python 樣例代碼的構(gòu)建腳本。<project> 標簽總是構(gòu)建腳本的根標簽。<taskdef> 標簽聲明在整個構(gòu)建腳本中使用的 Python 任務(wù)。在構(gòu)建腳本的底部,可以定義 compile 目標。目標元素內(nèi)部是 compile 運行期間執(zhí)行的任務(wù)。特別的是 py-compile 任務(wù),它負責從 src 目錄開始,編譯所有的 Python 代碼。
該任務(wù)會遞歸遍歷所有的子目錄,并編譯所有的 Python 源文件。腳本中沒有采用將 src 目錄硬編碼到調(diào)用之處的方式,而是在構(gòu)建腳本中定義了稱為 src.dir 的屬性。然后,在需要使用這個目錄名的時候,就可以通過 ${src.dir} 來引用。
要運行構(gòu)建腳本,可從 Eclipse 中打開它。Eclipse 具有內(nèi)置的 Ant 構(gòu)建腳本編輯和瀏覽功能。Outline 視圖可以顯示出構(gòu)建腳本的結(jié)構(gòu):
- 1: <property name="pydoc.dir" value="pydoc"/>
- 2:
- 3: <target name="init">
- 4: <mkdir dir="${pydoc.dir}"/>
- 5: </target>
- 6:
- 7: <target name="pydoc" depends="init,compile">
- 8: <py-doc pythonpath="${src.dir}" destdir="${pydoc.dir}">
- 9: <fileset dir="${src.dir}">
- 10: <include name="**/*"/>
- 11: </fileset>
- 12: </py-doc>
- 13: </target>
在 Navigator 視圖中,選擇該構(gòu)建腳本,用右鍵點擊,然后選擇“Run Ant...”。選擇 compile 目標,然后點擊“Run”。構(gòu)建腳本執(zhí)行過程中的輸出信息應(yīng)該顯示在 Console 視圖中,表示運行成功。
接下來將向構(gòu)建腳本中加入新的目標,用于執(zhí)行 Python 腳本(請參閱清單 2)。在本例中,可以將 RSS URL 作為參數(shù)來執(zhí)行 feedparser.py 腳本。 從對上述 pydoc 目標的解析可看出。
第 7 行聲明了目標名稱,并指出它依賴于 init 和 compile 目標。這意味著在運行 pydoc 目標之前,Ant 必須保證 init 和 compile 目標已經(jīng)運行,如果沒有,則首先運行這兩個目標。
pydoc 目標所依賴的 init 目標在第 3 至第 5 行定義。 init 目標僅僅創(chuàng)建了一個存放 PyDoc API 文檔文件的目錄。如前所述,要為所生成文檔的保存位置定義一個屬性,名為 pydoc.dir。
第 8 行開始是 py-doc 任務(wù)。如前所述,您傳入生成 pydoc 過程中所使用的 PYTHONPATH 。 destdir 屬性告訴 py-doc 任務(wù)將生成的 HTML 文檔輸出到何處。 第 9 至第 11 行定義了在生成文檔的過程中應(yīng)該處理哪些 Python 源文件。文件集是 Ant 腳本中通用的結(jié)構(gòu),可用于定義所操作的一組文件。
這是一種很強大的特性,它使您能夠通過名字模式、布爾邏輯和文件屬性來選擇所要操作的文件。Ant 文檔中有這方面的完整描述。本例中遞歸選擇了“src”目錄下的所有文件。 #t#
Python 源文件中具有標準的單元測試框架(從 Python 2.3 開始。在 Python 2.2 中這只是可選模塊),與 Java jUnit 框架十分類似。測試用例的結(jié)構(gòu)與 jUnit 采用相同的方式。每一個待測試的類和模塊通常都具有自己的測試類。測試類中包含測試裝置(fixture),它們在 setUp 函數(shù)中初始化。
每一個測試都編寫為測試類中的一個獨立的測試函數(shù)。unittest 框架會在測試函數(shù)之間循環(huán)往復(fù),先調(diào)用 setUp 、再測試函數(shù)、然后清除( tearDown )測試函數(shù)。請參閱清單 4 中的樣例。