Python from entry to abandon 4
Python from entry to abandon系列的收官之作
本篇博客將會(huì)介紹《簡(jiǎn)明Python教程》的最后四章內(nèi)容。并在最后附上對(duì)于本書(shū)的個(gè)人評(píng)價(jià)和下階段自學(xué)Python系列博客更新的計(jì)劃。
13.異常
14.Python標(biāo)準(zhǔn)庫(kù)
15.更多Python內(nèi)容
16.接下來(lái)學(xué)習(xí)什么?
13.異常
當(dāng)你的程序中出現(xiàn)某些異常的狀況的時(shí)候,異常就發(fā)生了。例如,當(dāng)你想要讀某個(gè)文件的時(shí) 候,而那個(gè)文件不存在?;蛘咴诔绦蜻\(yùn)行的時(shí)候,你不小心把它刪除了。上述這些情況可以使用異常來(lái)處理。
筆記:簡(jiǎn)單理解就是程序沒(méi)有正常執(zhí)行(例如編輯器報(bào)錯(cuò))就是異常。
假如你的程序中有一些無(wú)效的語(yǔ)句,會(huì)怎么樣呢?Python會(huì)引發(fā)并告訴你那里有一個(gè)錯(cuò)誤,從 而處理這樣的情況。
13.1錯(cuò)誤
考慮一個(gè)簡(jiǎn)單的print語(yǔ)句。假如我們把print誤拼為Print,注意大寫(xiě),這樣Python會(huì)引發(fā) 一個(gè)語(yǔ) 法錯(cuò)誤。
示例
>>> Print 'Hello World' File "<stdin>", line 1 Print 'Hello World' ^ SyntaxError: invalid syntax >>> print 'Hello World' Hello World
我們可以觀察到有一個(gè)SyntaxError被引發(fā),并且檢測(cè)到的錯(cuò)誤位置也被打印了出來(lái)。這是這個(gè) 錯(cuò)誤的 錯(cuò)誤處理器 所做的工作。
我們嘗試讀取用戶的一段輸入。按Ctrl-d,看一下會(huì)發(fā)生什么。
示例
>>> s=raw_input('Enter something-->') Enter something-->Traceback (most recent call last): File "<stdin>", line 1, in <module> EOFError
Python引發(fā)了一個(gè)稱為EOFError的錯(cuò)誤,這個(gè)錯(cuò)誤基本上意味著它發(fā)現(xiàn)一個(gè)不期望的 文件尾 (由Ctrl-d表示)
13.2處理異常
我們可以使用try..except語(yǔ)句來(lái)處理異常。我們把通常的語(yǔ)句放在try-塊中,而把我們的錯(cuò)誤處 理語(yǔ)句放在except-塊中。
例13.1
#!/usr/bin/Python #Filename:try_except.py import sys try: s=raw_input('Enter something-->') except EOFError: print 'Why did you do an EOF on me?' sys.exit() except: print '\nSome error/exception occurred' print 'Done'
輸出:
# Python try_except.py Enter something-->Why did you do an EOF on me? # Python try_except.py Enter something-->Python is exceptional! Done
如何工作:
我們把所有可能引發(fā)錯(cuò)誤的語(yǔ)句放在try塊中,然后在except從句/塊中處理所有的錯(cuò)誤和異常。 except從句可以專(zhuān)門(mén)處理單一的錯(cuò)誤或異常,或者一組包括在圓括號(hào)內(nèi)的錯(cuò)誤/異常。如果沒(méi)有 給出錯(cuò)誤或異常的名稱,它會(huì)處理 所有的 錯(cuò)誤和異常。對(duì)于每個(gè)try從句,至少都有一個(gè)相關(guān) 聯(lián)的except從句。
如果某個(gè)錯(cuò)誤或異常沒(méi)有被處理,默認(rèn)的Python處理器就會(huì)被調(diào)用。它會(huì)終止程序的運(yùn)行,并 且打印一個(gè)消息,我們已經(jīng)看到了這樣的處理。
你還可以讓try..catch塊關(guān)聯(lián)上一個(gè)else從句。當(dāng)沒(méi)有異常發(fā)生的時(shí)候,else從句將被執(zhí)行。
我們還可以得到異常對(duì)象,從而獲取更多有個(gè)這個(gè)異常的信息。
筆記:
讓try..catch塊關(guān)聯(lián)上一個(gè)else從句
示例
#!/usr/bin/Python #Filename:lansou.py try: s=raw_input('Enter an number-->') except EOFError: print '\nlansou' else: print 'xianggu'
程序不發(fā)生EOFError錯(cuò)誤時(shí)就會(huì)只執(zhí)行print’xianggu’,
不過(guò)直接把else:去掉效果其實(shí)是一樣的。
13.3引發(fā)異常:
你可以使用raise語(yǔ)句 引發(fā) 異常。你還得指明錯(cuò)誤/異常的名稱和伴隨異常 觸發(fā)的 異常對(duì)象。你 可以引發(fā)的錯(cuò)誤或異常應(yīng)該分別是一個(gè)Error或Exception類(lèi)的直接或間接導(dǎo)出類(lèi)。
筆記:可以自定義錯(cuò)誤/異常的類(lèi)型,滿足特定條件后用raise引發(fā)異常,
將自定義的異常跟在except之后,就能用來(lái)處理自定義的錯(cuò)誤/異常類(lèi)型了。
如何引發(fā)異常
例13.2
#!/usr/bin/Python #Filename:raising.py class ShortInputException(Exception): def __init__(self,length,atleast): Exception.__init__(self) self.length=length self.atleast=atleast try: s=raw_input('Enter something-->') if len(s)<3: raise ShortInputException(len(s),3) except EOFError: print '\nWhy did you do an EOF on me?' except ShortInputException,x: print 'ShortInputException:The input was of length %d,\ was expecting at least %d'%(x.length,x.atleast) else: print 'No exception was raised.'
輸出:
# Python raising.py Enter something--> Why did you do an EOF on me? # Python raising.py Enter something-->ab ShortInputException:The input was of length 2, was expecting at least 3 # Python raising.py Enter something-->abc No exception was raised.
如何工作:
這里,我們創(chuàng)建了我們自己的異常類(lèi)型,其實(shí)我們可以使用任何預(yù)定義的異常/錯(cuò)誤。這個(gè)新 的異常類(lèi)型是ShortInputException類(lèi)。它有兩個(gè)域——length是給定輸入的長(zhǎng)度,atleast則是程序 期望的最小長(zhǎng)度。
在except從句中,我們提供了錯(cuò)誤類(lèi)和用來(lái)表示錯(cuò)誤/異常對(duì)象的變量。這與函數(shù)調(diào)用中的形參和實(shí)參概念類(lèi)似。在這個(gè)特別的except從句中,我們使用異常對(duì)象的length和atleast域來(lái)為用戶打印一個(gè)恰當(dāng)?shù)南ⅰ?/p>
筆記:這段程序相當(dāng)綜合,涉及類(lèi),繼承,條件判斷,raise語(yǔ)句,except從句中變量替換,else從句等等。背熟了自己碼一遍————嗯,簡(jiǎn)直強(qiáng)無(wú)敵。這里我發(fā)現(xiàn)一個(gè)問(wèn)題,在except ShortInputException,x:中,為什么x是必須的,為什么不能去掉x用ShortInputException直接引用length和atleast?
13.4try..finally語(yǔ)句
假如你在讀一個(gè)文件的時(shí)候,希望在無(wú)論異常發(fā)生與否的情況下都關(guān)閉文件,該怎么做呢?這 可以使用finally塊來(lái)完成。注意,在一個(gè)try塊下,你可以同時(shí)使用except從句和finally塊。如果 你要同時(shí)使用它們的話,需要把一個(gè)嵌入另外一個(gè)。
使用finally
例13.3
#!/usr/bin/Python #Filename:finally.py import time try: f=file('poem.txt') while True: line=f.readline() if len(line)==0: break time.sleep(2) print line, finally: f.close() print 'Cleaning up...closed the file'
輸出:
# Python finally.py Programming is fun When the work is done if you wanna make you work also fun: use Python! Cleaning up...closed the file # Python finally.py Programming is fun When the work is done ^CCleaning up...closed the file Traceback (most recent call last): File "finally.py", line 12, in <module> time.sleep(2) KeyboardInterrupt
如何工作:
我們進(jìn)行通常的讀文件工作,但是我有意在每打印一行之前用time.sleep方法暫停2秒鐘。這樣 做的原因是讓程序運(yùn)行得慢一些(Python由于其本質(zhì)通常運(yùn)行得很快)。在程序運(yùn)行的時(shí)候, 按Ctrl-c中斷/取消程序。
我們可以觀察到KeyboardInterrupt異常被觸發(fā),程序退出。但是在程序退出之前,finally從句仍 然被執(zhí)行,把文件關(guān)閉。
筆記:學(xué)到了time模塊的sleep函數(shù),有趣。
概括:
我們已經(jīng)討論了try..except和try..finally語(yǔ)句的用法。我們還學(xué)習(xí)了如何創(chuàng)建我們自己的異常類(lèi)型 和如何引發(fā)異常。
接下來(lái),我們將探索Python標(biāo)準(zhǔn)庫(kù)。
14.Python標(biāo)準(zhǔn)庫(kù)
14.1簡(jiǎn)介
Python標(biāo)準(zhǔn)庫(kù)是隨Python附帶安裝的,它包含大量極其有用的模塊。熟悉Python標(biāo)準(zhǔn)庫(kù)是十分 重要的,因?yàn)槿绻闶煜み@些庫(kù)中的模塊,那么你的大多數(shù)問(wèn)題都可以簡(jiǎn)單快捷地使用它們來(lái)解決。
我們已經(jīng)研究了一些這個(gè)庫(kù)中的常用模塊。你可以在Python附帶安裝的文檔的“庫(kù)參考”一節(jié) 中了解Python標(biāo)準(zhǔn)庫(kù)中所有模塊的完整內(nèi)容。
14.2 sys模塊
命令行參數(shù)sys.argv
例14.1
#!/usr/bin/Python #Filename:cat.py import sys def readfile(filename): '''Print a file to the standard output.''' f=file(filename) while True: line=f.readline() if len(line)==0: break print line, f.close() #Script starts from here if len(sys.argv)<2: print 'No action specified.' sys.exit() if sys.argv[1].startswith('--'): option=sys.argv[1][2:] if option=='version': print 'Version 1.2' elif option=='help': print '''\ This program prints files to the standard output. Any number of files can be specified. Options include: --version:Prints the version number --help:Display this help''' else: print 'Unknown option.' sys.exit() else: for filename in sys.argv[1:]: readfile(filename)
輸出:
# Python cat.py No action specified. # Python cat.py --help This program prints files to the standard output. Any number of files can be specified. Options include: --version:Prints the version number --help:Display this help # Python cat.py --version Version 1.2 # Python cat.py --nonsense Unknown option. # Python cat.py poem.txt Programming is fun When the work is done if you wanna make you work also fun: use Python!
如何工作:
這個(gè)程序用來(lái)模范Linux/Unix用戶熟悉的cat命令。你只需要指明某些文本文件的名字,這個(gè)程 序會(huì)把它們打印輸出。
在Python程序運(yùn)行的時(shí)候,即不是在交互模式下,在sys.argv列表中總是至少有一個(gè)項(xiàng)目。它就是當(dāng)前運(yùn)行的程序名稱,作為sys.argv[0](由于Python從0開(kāi)始計(jì)數(shù))。其他的命令行參數(shù)在這 個(gè)項(xiàng)目之后。
為了使這個(gè)程序?qū)τ脩舾佑押?,我們提供了一些用戶可以指定的選項(xiàng)來(lái)了解更多程序的內(nèi)容。我們使用第一個(gè)參數(shù)來(lái)檢驗(yàn)我們的程序是否被指定了選項(xiàng)。如果使用了–version選項(xiàng),程序的版本號(hào)將被打印出來(lái)。類(lèi)似地,如果指定了–help選項(xiàng),我們提供一些關(guān)于程序的解釋。 我們使用sys.exit函數(shù)退出正在運(yùn)行的程序。和以往一樣,你可以看一下help(sys.exit)來(lái)了解更多 詳情。
如果沒(méi)有指定任何選項(xiàng),而是為程序提供文件名的話,它就簡(jiǎn)單地打印出每個(gè)文件地每一行,按照命令行中的順序一個(gè)文件接著一個(gè)文件地打印。
順便說(shuō)一下,名稱cat是concatenate的縮寫(xiě),它基本上表明了程序的功能——它可以在輸出打印一個(gè)文件或者把兩個(gè)或兩個(gè)以上文件連接/級(jí)連在一起打印。
更多sys的內(nèi)容
sys.version 提供安裝的Python的版本信息。
sys.version_info 是一個(gè)元祖,提供Python版本信息
sys.stdin標(biāo)準(zhǔn)輸入相關(guān)
sys.stdout標(biāo)準(zhǔn)輸出相關(guān)
sys.error標(biāo)準(zhǔn)錯(cuò)誤流
在命令行模式可以看到他們的用處,這里不一一列舉。
14.3 os模塊
這個(gè)模塊包含普遍的操作系統(tǒng)功能。如果你希望你的程序能夠與平臺(tái)無(wú)關(guān)的話,這個(gè)模塊是尤 為重要的。即它允許一個(gè)程序在編寫(xiě)后不需要任何改動(dòng),也不會(huì)發(fā)生任何問(wèn)題,就可以在 Linux和Windows下運(yùn)行。一個(gè)例子就是使用os.sep可以取代操作系統(tǒng)特定的路徑分割符。
下面列出了一些在os模塊中比較有用的部分。它們中的大多數(shù)都簡(jiǎn)單明了。
os.name字符串指示你正在使用的平臺(tái)。比如對(duì)于Windows,它是’nt’,而對(duì)于Linux/Unix 用戶,它是’posix’。
os.getcwd()函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑。
os.getenv()和os.putenv()函數(shù)分別用來(lái)讀取和設(shè)置環(huán)境變量。
os.listdir()返回指定目錄下的所有文件和目錄名。
os.remove()函數(shù)用來(lái)刪除一個(gè)文件。
os.linesep字符串給出當(dāng)前平臺(tái)使用的行終止符。例如,Windows使用’\r\n’,Linux使 用’\n’而Mac使用’\r’。
os.path.split()函數(shù)返回一個(gè)路徑的目錄名和文件名。
>>> os.path.split('/home/swaroop/byte/code/poem.txt') ('/home/swaroop/byte/code', 'poem.txt')
os.path.isfile()和os.path.isdir()函數(shù)分別檢驗(yàn)給出的路徑是一個(gè)文件還是目錄。類(lèi)似地,os. path.exists()函數(shù)用來(lái)檢驗(yàn)給出的路徑是否真地存在。
你可以利用Python標(biāo)準(zhǔn)文檔去探索更多有關(guān)這些函數(shù)和變量的詳細(xì)知識(shí)。你也可以使用help (sys)等等。
概括:
14章介紹了Python標(biāo)準(zhǔn)庫(kù)中sys和os模塊的一部分功能。利用Python標(biāo)準(zhǔn)文檔可以學(xué)習(xí)這兩個(gè)模塊以及其他模塊的更多內(nèi)容。
15.更多Python的內(nèi)容
到目前為止,我們已經(jīng)學(xué)習(xí)了絕大多數(shù)常用的Python知識(shí)。在這一章中,我們將要學(xué)習(xí)另外一 些方面的Python知識(shí),從而使我們對(duì)Python的了解更加 完整 。
15.1特殊的方法
在類(lèi)中有一些特殊的方法具有特殊的意義,比如init和del方法,它們的重要性我們已 經(jīng)學(xué)習(xí)過(guò)了。
一般說(shuō)來(lái),特殊的方法都被用來(lái)模仿某個(gè)行為。例如,如果你想要為你的類(lèi)使用x[key]這樣的 索引操作(就像列表和元組一樣),那么你只需要實(shí)現(xiàn)getitem()方法就可以了。想一下, Python就是對(duì)list類(lèi)這樣做的!
筆記:特殊方法就是前后各有雙下劃線的類(lèi)內(nèi)部定義的方法。這本書(shū)詳細(xì)介紹了init del的用法,其他我覺(jué)得沒(méi)有列出來(lái)的必要,不知道用法記住也沒(méi)有多大意義。
15.2單語(yǔ)句塊
現(xiàn)在,你已經(jīng)很深刻地理解了每一個(gè)語(yǔ)句塊是通過(guò)它的縮進(jìn)層次與其它塊區(qū)分開(kāi)來(lái)的。然而這 在大多數(shù)情況下是正確的,但是并非100%的準(zhǔn)確。如果你的語(yǔ)句塊只包含一句語(yǔ)句,那么你 可以在條件語(yǔ)句或循環(huán)語(yǔ)句的同一行指明它。下面這個(gè)例子清晰地說(shuō)明了這一點(diǎn):
>>> flag = True >>> if flag: print 'Yes' ... Yes
就如你所看見(jiàn)的,單個(gè)語(yǔ)句被直接使用而不是作為一個(gè)獨(dú)立的塊使用。雖然這樣做可以使你的 程序變得 小一些 ,但是除了檢驗(yàn)錯(cuò)誤之外我強(qiáng)烈建議你不要使用這種縮略方法。不使用它的 一個(gè)主要的理由是一旦你使用了恰當(dāng)?shù)目s進(jìn),你就可以很方便地添加一個(gè)額外的語(yǔ)句。
另外,注意在使用交互模式的Python解釋器的時(shí)候,它會(huì)通過(guò)恰當(dāng)?shù)馗淖兲崾痉麃?lái)幫助你輸入 語(yǔ)句。在上面這個(gè)例子中,當(dāng)你輸入了關(guān)鍵字if之后,Python解釋器把提示符改變?yōu)椤员硎菊Z(yǔ) 句還沒(méi)有結(jié)束。在這種情況下,我們按回車(chē)鍵用來(lái)確認(rèn)語(yǔ)句已經(jīng)完整了。然后,Python完成整 個(gè)語(yǔ)句的執(zhí)行,并且返回原來(lái)的提示符并且等待下一句輸入。
15.3列表綜合
通過(guò)列表綜合,可以從一個(gè)已有的列表導(dǎo)出一個(gè)新的列表。例如,你有一個(gè)數(shù)的列表,而你想要得到一個(gè)對(duì)應(yīng)的列表,使其中所有大于2的數(shù)都是原來(lái)的2倍。對(duì)于這種應(yīng)用,列表綜合是最 理想的方法。
使用列表綜合
例15.1
#!/usr/bin/Python #Filename:list_comprehension.py listone=[2,3,4] listtwo=[2*i for i in listone if i>2] print listtwo
輸出:
# Python list_comprehension.py [6, 8]
如何工作:
這里我們?yōu)闈M足條件(if i > 2)的數(shù)指定了一個(gè)操作(2i),從而導(dǎo)出一個(gè)新的列表。注意原 來(lái)的列表并沒(méi)有發(fā)生變化。在很多時(shí)候,我們都是使用循環(huán)來(lái)處理列表中的每一個(gè)元素,而使 用列表綜合可以用一種更加精確、簡(jiǎn)潔、清楚的方法完成相同的工作。
??? 15.4在函數(shù)中接收元組和列表
當(dāng)要使函數(shù)接收元組或字典形式的參數(shù)的時(shí)候,有一種特殊的方法,它分別使用和**前綴。 這種方法在函數(shù)需要獲取可變數(shù)量的參數(shù)的時(shí)候特別有用。
>>> def powersum(power, *args): ... '''Return the sum of each argument raised to specified power.''' ... total = 0 ... for i in args: ... total += pow(i, power) ... return total ... >>> powersum(2, 3, 4) 25 >>> powersum(2, 10) 100
由于在args變量前有*前綴,所有多余的函數(shù)參數(shù)都會(huì)作為一個(gè)元組存儲(chǔ)在args中。如果使用的 是**前綴,多余的參數(shù)則會(huì)被認(rèn)為是一個(gè)字典的鍵/值對(duì)。
筆記:
自己看了一遍去編寫(xiě),一萬(wàn)種錯(cuò)法。果然眼高手低。
注意,以下是各種神奇(逗比)的錯(cuò)誤方式,真的好玩。
>>> def powersum(pow,*args): ... total=0 ... if i in args: ... total+=power(i,pow) ... return total ... >>> powersum(2,3,4) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in powersum NameError: global name 'i' is not defined >>> def powersum(pow,*args) File "<stdin>", line 1 def powersum(pow,*args) ^ SyntaxError: invalid syntax >>> def powersum(pow,*args): ... total=0 ... for i in args: ... total+=power(i,pow) ... return total ... >>> powernum(2,3,4) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'powernum' is not defined >>> powersum(2,3,4) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in powersum NameError: global name 'power' is not defined
15.5 lambda語(yǔ)句
lambda語(yǔ)句用來(lái)創(chuàng)建新的函數(shù)對(duì)象,并且在運(yùn)行時(shí)返回它們(需要和return語(yǔ)句搭配使用)。
使用lambda形式
例15.2
#!/usr/bin/Python #Filename:lambda.py def make_repeater(n): return lambda s:s*n twice=make_repeater(2) print twice('word') print twice(5)
輸出:
# Python lambda.py wordword 10
如何工作:
它如何工作
這里,我們使用了make_repeater函數(shù)在運(yùn)行時(shí)創(chuàng)建新的函數(shù)對(duì)象,并且返回它。lambda語(yǔ)句用 來(lái)創(chuàng)建函數(shù)對(duì)象。本質(zhì)上,lambda需要一個(gè)參數(shù),后面僅跟單個(gè)表達(dá)式作為函數(shù)體,而表達(dá)式 的值被這個(gè)新建的函數(shù)返回。注意,即便是print語(yǔ)句也不能用在lambda形式中,只能使用表達(dá)式。
15.6 exec和eval語(yǔ)句
exec語(yǔ)句用來(lái)執(zhí)行儲(chǔ)存在字符串或文件中的Python語(yǔ)句。
>>> exec 'print "Hello World"' Hello World
eval語(yǔ)句用來(lái)計(jì)算儲(chǔ)存在在字符串中的有效Python表達(dá)式。
>>> eval('2*3') 6
筆記:注意eval語(yǔ)句的格式和exec不同。
15.7 assert語(yǔ)句
assert語(yǔ)句用來(lái)聲明某個(gè)條件是真的。例如,如果你非常確信某個(gè)你使用的列表中至少有一個(gè) 元素,而你想要檢驗(yàn)這一點(diǎn),并且在它非真的時(shí)候引發(fā)一個(gè)錯(cuò)誤,那么assert語(yǔ)句是應(yīng)用在這 種情形下的理想語(yǔ)句。當(dāng)assert語(yǔ)句失敗的時(shí)候,會(huì)引發(fā)一個(gè)AssertionError。
筆記:這里讓我想起了老師曾經(jīng)說(shuō)過(guò)的運(yùn)維一定要三思而后行。純靠記憶顯然是不靠譜的,要用實(shí)踐來(lái)進(jìn)行檢驗(yàn)。
>>> mylist=['item'] >>> assert len(mylist)>=1 >>> mylist.pop() 'item' >>> assert len(mylist)>=1 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError
筆記:這里mylist.pop()執(zhí)行的功能是從隊(duì)列的尾部推出一個(gè)元素。
>>> mylist=['apple','banana'] >>> mylist.pop() 'banana' >>> mylist.pop() 'apple'
15.8 repr函數(shù)
repr函數(shù)用來(lái)取得對(duì)象的規(guī)范字符串表示。反引號(hào)(也稱轉(zhuǎn)換符)可以完成相同的功能。
注意,在大多數(shù)時(shí)候有eval(repr(object)) == object。
>>> i=[] >>> i.append('item') >>> `i` "['item']" >>> repr(i) "['item']"
基本上,repr函數(shù)和反引號(hào)用來(lái)獲取對(duì)象的可打印的表示形式。你可以通過(guò)定義類(lèi)的repr 方法來(lái)控制你的對(duì)象在被repr函數(shù)調(diào)用的時(shí)候返回的內(nèi)容。
筆記:
>>> print i ['item'] >>> print repr(i) ['item'] >>> repr(i) "['item']"
以上示例可以更好的說(shuō)明什么叫做獲取對(duì)象的可打印的表示形式。
概括
在這一章中,我們又學(xué)習(xí)了一些Python的特色,然而你可以肯定我們并沒(méi)有學(xué)習(xí)完P(guān)ython的所 有特色。不過(guò),到目前為止,我們確實(shí)已經(jīng)學(xué)習(xí)了絕大多數(shù)你在實(shí)際中會(huì)使用的內(nèi)容。這些已 經(jīng)足以讓你去創(chuàng)建任何程序了。
接下來(lái),我們會(huì)討論一下如何進(jìn)一步深入探索Python。
16.接下來(lái)學(xué)習(xí)什么?
16.1圖形軟件(GUI工具概括)
這一部分我不打算列出來(lái),因?yàn)槲覍?duì)圖形軟件沒(méi)好感。
16.2探索更多內(nèi)容
Python標(biāo)準(zhǔn)庫(kù)是一個(gè)豐富的庫(kù),在大多數(shù)時(shí)候,你可以在這個(gè)庫(kù)中找到你所需的東西。 這被稱為Python的“功能齊全”理念。我強(qiáng)烈建議你在開(kāi)始開(kāi)發(fā)大型Python程序之前瀏 覽一下Python標(biāo)準(zhǔn)文檔。
Python.org——Python編程語(yǔ)言的官方主頁(yè)。你可以在上面找到Python語(yǔ)言和解釋器的最 新版本。另外還有各種郵件列表活躍地討論P(yáng)ython的各方面內(nèi)容。
comp.lang.Python是討論P(yáng)ython語(yǔ)言的世界性新聞組。你可以把你的疑惑和詢問(wèn)貼在這個(gè) 新聞組上。可以使用Google群在線訪問(wèn)這個(gè)新聞組,或加入作為新聞組鏡像的郵件列 表。
《Python實(shí)用大全》是一個(gè)極有價(jià)值的秘訣和技巧集合,它幫助你解決某些使用Python 的問(wèn)題。這是每個(gè)Python用戶必讀的一本書(shū)。
《迷人的Python》是David Mertz編著的一系列優(yōu)秀的Python相關(guān)文章。
《深入理解Python》是給有經(jīng)驗(yàn)的Python程序員的一本很優(yōu)秀的書(shū)。如果你已經(jīng)完整地 閱讀了本書(shū),那么我強(qiáng)烈建議你接下來(lái)閱讀《深入理解Python》。它覆蓋了包括XML處 理、單元測(cè)試和功能性編程在內(nèi)的廣泛的主題。
Jython是用Java語(yǔ)言實(shí)現(xiàn)的Python解釋器。這意味著你可以用Python語(yǔ)言編寫(xiě)程序而同時(shí) 使用Java庫(kù)!Jython是一個(gè)穩(wěn)定成熟的軟件。如果你也是一個(gè)Java程序員,我強(qiáng)烈建議你 嘗試一下Jython。
IronPython是用C#語(yǔ)言實(shí)現(xiàn)的Python解釋器,可以運(yùn)行在.NET、Mono和DotGNU平臺(tái) 上。這意味著你可以用Python語(yǔ)言編寫(xiě)程序而使用.NET庫(kù)以及其他由這三種平臺(tái)提供的 庫(kù)!IronPython還只是一個(gè)前期alpha測(cè)試軟件,現(xiàn)在還只適合用來(lái)進(jìn)行試驗(yàn)。Jim Hugunin,IronPython的開(kāi)發(fā)者,已經(jīng)加入了微軟公司,將在將來(lái)全力開(kāi)發(fā)一個(gè)完整版本 的IronPython。
Lython是Python語(yǔ)言的Lisp前段。它類(lèi)似于普通的Lisp語(yǔ)言,會(huì)被直接編譯為Python字節(jié) 碼,這意味著它能與我們普通的Python代碼協(xié)同工作。
另外還有很多很多的Python資源。其中比較有趣的有Daily Python-URL!,它使你保持與 Python的最新進(jìn)展同步。另外還有Vaults of Parnassus、ONLamp.com Python DevCenter、 dirtSimple.org、Python Notes等等。
概括
現(xiàn)在,我們已經(jīng)來(lái)到了本書(shū)的末尾,但是就如那句名言,這只是 開(kāi)始的結(jié)束 !你現(xiàn)在是一個(gè) 滿懷渴望的Python用戶,毫無(wú)疑問(wèn)你準(zhǔn)備用Python解決許多問(wèn)題。你可以使你的計(jì)算機(jī)自動(dòng)地 完成許多先前無(wú)法想象的工作或者編寫(xiě)你自己的游戲,以及更多別的什么東西。所以,請(qǐng)出發(fā)吧!
結(jié)尾筆記:
很開(kāi)心,看完了第一本Python相關(guān)書(shū)籍。
按照書(shū)中的流程走了一遍,結(jié)合筆記和知識(shí)點(diǎn)總結(jié)成了這四篇博客。在整個(gè)過(guò)程中,書(shū)中給出的例題大多數(shù)憑記憶敲了一遍,看了一遍書(shū)之后寫(xiě)博客的時(shí)候相當(dāng)于把書(shū)又讀了一遍,甚至比單獨(dú)看書(shū)的時(shí)候還要認(rèn)真。自我感覺(jué)這是一個(gè)不錯(cuò)的學(xué)習(xí)方法,對(duì)鞏固知識(shí)點(diǎn)很有幫助,相當(dāng)于復(fù)習(xí)和總結(jié)。
借用書(shū)中提到的丘吉爾的名言,“Now this is not the end.It is not even the beginning of the end.But it is,perhaps,the end of the beginning.”
是的,精彩的Python之旅才剛剛起步而已。