學習Python擴展模塊技巧說明
Python擴展模塊的開源,可移植到多種操作系統,只要避免使用依賴于特定操作系統的特性,Python程序無需修改就可以在各種平臺上面運行,這么方便的語言一定會超越現在主流的編程語言。
字符串可以很容易地從文件讀入或向文件寫出。讀入數值要麻煩一些,因為read()方法總是返回字符串,要把讀入的字符串傳給象string.atoi()這樣的函數。把象‘123’這樣的字符串轉換為對應的整數值123。但是,當你想保存更復雜的數據類型如列表、字典或類實例時,讀寫就要復雜得多。
Python的設計使程序員可以不必反復編寫調試保存復雜數據類型的代碼,它提供了一個叫做pickle的標準模塊。這個令人驚異的模塊可以把幾乎任何Python對象轉換為字符串表示。
這個過程叫做腌制,從對象的字符串表示恢復對象叫做恢復。在腌制和反腌制之間,對象的字符串表示可以保存在文件或數據中,甚至于通過網絡連接傳送到遠程計算機上。如果你有一個對象x,有一個可寫的文件對象f,最簡單的腌制對象的辦法是下面一行代碼: 為了恢復對象,如果剛才的文件已打開用于讀取,文件對象名仍為f。
(腌制和恢復還有其它用法,可以腌制多個對象,可以不把數據寫入文件,詳見庫參考手冊)。 pickle是保存Python擴展模塊并被其它程序或同一程序以后再運行時調用的標準辦法。這種做法的專用術語叫做“持久對象”。因為pickle使用廣泛,許多Python擴展模塊的作者都留意使新增加的數據類型如矩陣可以正確地腌制和恢復。
我們常常需要控制輸出格式,而不僅僅是顯示空格分開的值。有兩種辦法控制輸出格式:一種辦法是自己進行字符串處理。用字符串的片斷和合并操作可以產生任何可以想象的格式。標準模塊string包含了諸如把字符串填充到指定的列寬這樣的有用操作,后面會有提及。
還有一個函數string.zfill(),可以在數值左邊填零。此函數可以處理帶有加減號的情況:
- >>> string.zfill('12', 5)
- '00012'
- >>> string.zfill('-3.14', 7)
- '-003.14'
- >>> string.zfill('3.14159265359', 5)
- '3.14159265359'
- %操作符的用法如下例:
- >>> import math
- >>> print 'The value of PI is approximately %5.3f.' % math.pi
- The value of PI is approximately 3.142.
- 如果有多個值可以用一個序表給出,這時格式字符串中要有多個格式,如:
- >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
- >>> for name, phone in table.items():
- ... print'%-10s ==> %10d' % (name, phone)
- ...
- Jack ==> 4098
- Dcab ==> 8637678
- Sjoerd ==> 4127
Python擴展模塊錯誤信息的***一行顯示發生的情況。例外有不同的類型,類型作為錯誤信息的一部分顯示:上例中錯誤的類型有ZeroDivisionError、NameError和TypeError。作為例外類型顯示的字符串是發生的例外的內置名。這對于所有內置例外成立,但對用戶自定義例外不一定成立(用戶***能遵守這樣的約定)。標準例外名是內置的標識符(不是保留關鍵字)。
此行的其余部分是錯誤的細節,其解釋依賴于例外類型。錯誤信息前面的部分以堆棧反跟蹤的形式顯示了發生錯誤的上下文環境。一般這包含了列出源代碼行的一個列出源程序行的堆棧反跟蹤;然而,它不會顯示從標準輸入讀進的行。
【編輯推薦】