前言:
一種解釋型的、面向對象的、帶有動态語義的進階程式設計語言。
第一章 基礎知識
相比C++,有點不同的是輸入原始字元,不需要使用轉義斜杆,隻需要在字元最前面輸入r,譬如:r"xxx"。
第二章 清單與元組
list也有一系列的函數,跟C++的stl類似,了解後再慢慢的熟悉,代碼寫起來很友善。list在操作上既像是數組,又像是堆棧,仿佛把所有用起來舒服的操作都給借鑒過來了。list從設計上就考慮到要融合數組、堆棧的功能。reversed、sorted傳回list。
list調用sort函數的時候,可以使用自定義的比較函數。
第三章 使用字元串
“如果使用list或者其它序列代替tuple,那麼序列就會被解釋為一個值。隻有tuple和dictionary可以格式化一個以上的值。”
不要出現跟python導出類型同名的檔案,譬如把檔案名名為string就不行,因為python代碼:from string import Template,會錯誤的導入你自己寫的string.py檔案,而不是系統提供的檔案。
在python3.0中,字元串都是以unicode存儲的。
join,把某個字元串加入到一串序列中,把序列中的元素連接配接起來。
strip函數,可以去除輸入字元串兩端的特定字元。譬如data.strip(‘ */<’),去除那些注釋資訊。
第四章 字典
類似于STL的map,資料格式上可擴充性更強,資料的組織就是json格式,字典資料可以轉換為元組+清單。
第五章 條件、循環和其他語句
for後面支援跟着else,當for循環不是通過break跳出時,就會執行else中的内容。
第六章 抽象
python函數的參數有非常多的支援,雜七雜八的,要記住都麻煩,還是簡單最好,用的時候再查查手冊。基本用法跟C、C++沒多大差别。函數聲明上,使用def關鍵字。
第七章 更加抽象
python也支援多繼承,如:class subclass(base_a, base_b):...
第八章 異常
可以定義自己的異常,異常可以捕獲。跟windows的try except類似。
第九章 魔法方法、屬性和疊代器
相比C++多了一個叫做類函數的東西。類函數預設會給予一個cls參數,表明類資訊,執行個體可以調用類函數。靜态函數也是類、類執行個體也可以調用。
生成器上個有趣的知識,可以這樣子了解:使用yield的函數傳回一個疊代器,外界通過疊代器通路資料,資料在需要的時候才去産生,一旦産生一個可以傳回的資料了,就暫停執行儲存執行環境,下一次通路再繼續執行。yield是2.4才加入的功能。實際上生成器(也就是包含有yield關鍵字的函數)傳回的是一個疊代器,資料在需要的時候再去繼續生成。
使用yield來處理多路徑的算法極其友善。1、疊代器效果:每産生一條合适路徑就傳回,等這條路徑輸出後,繼續往下執行,是以我們函數内部不需要自己去寫臨時合法路徑存儲;2、回退功能,尋找合法路徑時,不需要自己去做回退邏輯,有效資料必須是能執行到yield關鍵之所在語句的,沒有執行到不用處理(使用C、C++寫,則需要做回退處理);3、無須存儲臨時半成品路徑:yield内部的實作可能就包含了存儲半成品路徑的邏輯,使這個半成品路徑在下次回溯的時候用上。對8皇後問題,隻需要寫很少的代碼就可以解決。
yield可以使得資料在需要的時候再産生,也就是lazy evaluation,要lazy,是以内部必須有存儲執行環境的邏輯,是以半成品資料由yield負責存儲也就順理成章了。
lazy evaluation可以用來解決一次性幹會占用太多記憶體空間的問題。
yield的lazy思想,其實可以由程式員自己來實作,但是由python實作,則可以降低程式員的難度,友善了程式員,很多功能python已經給我們實作了,難怪pythoner說“人生苦短,我用python”。GOOD!
性能問題,python提供的這種支援,性能比較差。
python的基礎知識已經看完了。
第十章 充電時刻
exec函數可以用來執行python腳本。
shelve支援了記憶體檔案存儲,代碼中以字典格式存儲,實際的磁盤檔案是python自定義的格式。使用shelve存儲的時候會産生3個檔案。
正規表達式的支援(re子產品),非常強大,是利器。
第十一章 檔案和素材
這是專門講解用于檔案操作的方法。在之前的章節裡還談到了其他方法,如:fileinput可以讀取檔案、shelve可以用來做程式運作資料庫,這兩種方法都是有局限的,fileinput隻能讀取檔案,shelve隻能寫入、讀取python自定義格式的檔案,從設計上來說這shelve是用于制造資料庫的。
第十二章 圖形使用者界面
wxWidgets是一個開源的跨平台的C++構架庫(framework)。wxWidgets的主體是C++建構的,但可以通過多種語言使用。wxPython就是wxWidgets的python使用入口。
使用python,可以28行代碼寫一個簡單的文本編輯器,有GUI界面的。
字尾修改為pyw運作的時候會隐藏python dos視窗,看起來就像pyw就是一個exe,實際上當然不是了,是需要依賴python、wxPython的。
第十三章 資料庫支援
python有标準化的支援,沒看懂。python如何使用SQLite比較簡單,看得懂,對于我來說,關鍵是如何熟悉SQL語句。
第十四章 網絡程式設計
socket程式設計有socket子產品支援,幾行代碼搞定一個demo。
urllib可以友善的實作很多http協定相關的操作。
Twisted是一個很好的網絡庫。書中介紹,來自Twisted Matrix實驗室的Twisted是一個事件驅動的Python網絡架構,原來是為網絡遊戲開發的,現在被所有類型的網絡軟體使用。在Twisted中,需要實作事件處理程式,這很像在GUI工具包中做的那樣。
使用:安裝Twisted、zope。
第十五章 Python和網際網路
‘螢幕抓取’,這裡說的是使用工具把網頁的内容下載下傳下來。簡單的螢幕抓取程式是這樣子:使用urllib庫下載下傳url,然後使用正在表達式庫re解析網頁,得到關鍵資料。
Tidy庫,用于修複不規範且随意的HTML的工具。需要下載下傳Tidy的DLL封裝版本mxTidy,或者下載下傳Tidy的exe版本,然後通過exe調用得到解析後的正确html。
HTMLParse是一個封裝了html解析的庫。
CGI子產品可以很友善的實作CGI。
mod_python無法安裝使用,看起來已經是過時的産物了。把官網上下載下傳到的mod_python.dll加入到httpd.conf的加載子產品中,會導緻Apache無法啟動,懷疑必須使用.os檔案才能加載。.os檔案找不到,可能需要自己去編譯産生。是以mod_python無法實驗如何使用,估計python腳本代碼不需要修改,隻是用來加快背景的處理速度。
stackoverflow有人說,mod_python是被淘汰了:http://stackoverflow.com/questions/3225498/mod-python-for-python-2-7“Support for mod_python has been deprecated, and will be removed in Django 1.5. If you are configuring a new deployment, you are strongly encouraged to consider using mod_wsgi or any of the other supported servers.”更好的是使用wsgi。
之後的内容主要是以知識連結為主,沒有編碼内容,暫不細看。
第十六章 測試
講解測試驅動開發在python上如何實踐,沒必要看。
第十七章 擴充Python
Python可以使用del,但删除的可能僅僅是它自己,而無法删除它所引用的對象。譬如:y = ['a']; x = y; del x; 這時候,y所指向的清單還是存在的,因為x還指向了該對象,可以了解為:引用計數不是0是以沒有回收對象。
使用SWIG架起python跟C++的橋梁,非常友善。
第十八章 程式打包
Distutils是個不錯的打包工具,可以把自己寫的python庫打包成安裝包。py2exe是一個Python Distutils子產品的擴充,能夠将python腳本轉換為windows下的exe,exe使用者無需安裝python,也可以運作。一個簡單的HelloWorld腳本使用py2exe工具之後,未壓縮總共有5MB大小。python的工具使用起來非常簡單,如沒有定制化的要求,那也夠用了。
第十九章 好玩的程式設計
講述一些簡單的設計思想:可配置、日志、自動化測試。
第二十章 項目1:即時标記
講述如何使用python對字元串做處理,添加标記,譬如:純文字轉為HTML格式文本。
第二十一章 項目2:畫幅好畫
reportlab子產品、PIL子產品。
第二十二章 項目3:萬能的XML
xml子產品解析xml文本生成html文本。
第二十三章 項目4: 新聞聚合
使用nntplib、urllib子產品擷取新聞伺服器、網頁,并做解析輸出為自定義的html網頁。
第二十四章 項目5:虛拟茶話會
asyncore、asynchat子產品。這兩個子產品是對socket子產品的封裝,可用于實作異步。
在區域網路下做了測試,沒有問題。如果要對外網開放,這需要有一個對外網的IP和端口。
書中的例子有設計的味道,server--session--room(loginroomlogoutroommainroom),挺好的。
第二十五章 項目6:使用CGI進行遠端編輯
注意python裡用print傳回的字元串不能随便删除換行,譬如在Content-type: text/html後面的換行就不能随便的删除掉它。
apache的配置、html的知識、python的知識,搞定。
第二十七章 項目8: 使用XML-RPC進行檔案共享
--------------------
入門書籍,後面當作工具書籍來檢視。要多寫、多讀python代碼,才不會忘記文法。