學(xué)習(xí)Python擴(kuò)展模塊技巧說明
Python擴(kuò)展模塊的開源,可移植到多種操作系統(tǒng),只要避免使用依賴于特定操作系統(tǒng)的特性,Python程序無需修改就可以在各種平臺上面運(yùn)行,這么方便的語言一定會(huì)超越現(xiàn)在主流的編程語言。
字符串可以很容易地從文件讀入或向文件寫出。讀入數(shù)值要麻煩一些,因?yàn)閞ead()方法總是返回字符串,要把讀入的字符串傳給象string.atoi()這樣的函數(shù)。把象‘123’這樣的字符串轉(zhuǎn)換為對應(yīng)的整數(shù)值123。但是,當(dāng)你想保存更復(fù)雜的數(shù)據(jù)類型如列表、字典或類實(shí)例時(shí),讀寫就要復(fù)雜得多。
Python的設(shè)計(jì)使程序員可以不必反復(fù)編寫調(diào)試保存復(fù)雜數(shù)據(jù)類型的代碼,它提供了一個(gè)叫做pickle的標(biāo)準(zhǔn)模塊。這個(gè)令人驚異的模塊可以把幾乎任何Python對象轉(zhuǎn)換為字符串表示。
這個(gè)過程叫做腌制,從對象的字符串表示恢復(fù)對象叫做恢復(fù)。在腌制和反腌制之間,對象的字符串表示可以保存在文件或數(shù)據(jù)中,甚至于通過網(wǎng)絡(luò)連接傳送到遠(yuǎn)程計(jì)算機(jī)上。如果你有一個(gè)對象x,有一個(gè)可寫的文件對象f,最簡單的腌制對象的辦法是下面一行代碼: 為了恢復(fù)對象,如果剛才的文件已打開用于讀取,文件對象名仍為f。
(腌制和恢復(fù)還有其它用法,可以腌制多個(gè)對象,可以不把數(shù)據(jù)寫入文件,詳見庫參考手冊)。 pickle是保存Python擴(kuò)展模塊并被其它程序或同一程序以后再運(yùn)行時(shí)調(diào)用的標(biāo)準(zhǔn)辦法。這種做法的專用術(shù)語叫做“持久對象”。因?yàn)閜ickle使用廣泛,許多Python擴(kuò)展模塊的作者都留意使新增加的數(shù)據(jù)類型如矩陣可以正確地腌制和恢復(fù)。
我們常常需要控制輸出格式,而不僅僅是顯示空格分開的值。有兩種辦法控制輸出格式:一種辦法是自己進(jìn)行字符串處理。用字符串的片斷和合并操作可以產(chǎn)生任何可以想象的格式。標(biāo)準(zhǔn)模塊string包含了諸如把字符串填充到指定的列寬這樣的有用操作,后面會(huì)有提及。
還有一個(gè)函數(shù)string.zfill(),可以在數(shù)值左邊填零。此函數(shù)可以處理帶有加減號的情況:
- >>> 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.
- 如果有多個(gè)值可以用一個(gè)序表給出,這時(shí)格式字符串中要有多個(gè)格式,如:
- >>> 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擴(kuò)展模塊錯(cuò)誤信息的***一行顯示發(fā)生的情況。例外有不同的類型,類型作為錯(cuò)誤信息的一部分顯示:上例中錯(cuò)誤的類型有ZeroDivisionError、NameError和TypeError。作為例外類型顯示的字符串是發(fā)生的例外的內(nèi)置名。這對于所有內(nèi)置例外成立,但對用戶自定義例外不一定成立(用戶***能遵守這樣的約定)。標(biāo)準(zhǔn)例外名是內(nèi)置的標(biāo)識符(不是保留關(guān)鍵字)。
此行的其余部分是錯(cuò)誤的細(xì)節(jié),其解釋依賴于例外類型。錯(cuò)誤信息前面的部分以堆棧反跟蹤的形式顯示了發(fā)生錯(cuò)誤的上下文環(huán)境。一般這包含了列出源代碼行的一個(gè)列出源程序行的堆棧反跟蹤;然而,它不會(huì)顯示從標(biāo)準(zhǔn)輸入讀進(jìn)的行。
【編輯推薦】






