寫了將近兩年的Python快速教程,終於大概成形。這一系列文章,包括Python基礎、標準庫、Django框架。前前後後的文章,包含了Python最重要的組成部分。這一內容的跨度遠遠超過我的預期,也超過了我看過的任何Python相關書籍。最初動筆的原因,除了要總結,還對很多Python書和教程覺得不滿意,覺得太晦澀,又不夠全面。現在,我比較確定,參考我在Linux、網路、演算法方面的總結,讀者可以在無基礎的背景下,在短時間,有深度的學習Python了。
這一篇也是尾聲。準備在一個長的時間內,停止更新Python快速教程,把精力集中在其它方面。畢竟一件事情做久了,會缺乏自我突破。程式設計是一個很有創新性,很需要突破自我的工作。在一個方面待久了,自己都會覺得發餿。而未知的計算機領域中,還有很多有趣的技術值得更深入的學習。另一方面,Python用舒服了,導致我一想到問題,基本都是Python的思路。這樣,Python就成了我的舒服區域。我懶得去想,Java會如何解決,Scala會如何解決,C會如何解決。成長的空間被壓縮得很小。為了自己能前進,要打破這個舒適區。
謝謝各位閱讀這些的Python文章。你們的支援是我走到現在的最大動力。希望這些技術文章能點綴你的閒暇。如果再能有一些具體的幫助,那就最好不過了。
下面是我在知乎回答的一個帖子“你是如何自學Python的”,略做修改,作為總結:
我是自學的Python。從對Python一無所知,到在部落格上寫Python相關的系列文章,期間有不少門檻,但也充滿樂趣。樂趣是自學的最大動力。Python是一個容易編寫,又功能強大的動態語言。使用Python,可以在短短几行內實現相當強大的功能。通過自己寫一些小程式,迅速的看到效果,發現問題,這是學習Python最便利的地方。在《黑客與畫家》中,Paul也說,動態語言可以給Hacker們更多塗塗畫畫的快感。這深得我心。
在學習Python之前,可以瞭解一下Python的特點和設計理念(Python簡史)。在設計之初,Python就試圖在複雜、強大的C和方便、功能有限的bash之間,找到一個平衡點。Python的語法比較簡單,用起來很方便,因此有些人把它當作指令碼語言使用。但Python要比普通的指令碼語言功能強大很多。通過良好的可擴充性,Python的功能相當全面,應用面很廣:web伺服器,網路爬蟲,科學運算,機器學習,遊戲開發…… 當然,天下沒有免費的午餐,也沒有完美的語言,Python為了達到上述兩點,有意的犧牲了Python的執行速度。如果你是在編寫高業務量、運算量的程式,可能Python並不是最好的選擇。
—–
Python的主體內容大致可以分為以下幾個部分:
- 程式導向。包括基本的表示式,if語句,迴圈,函式等。如果你有任何一個語言的基礎,特別是C語言的基礎,這一部分就是分分鐘瞭解下Python規定的事。如果你沒有語言基礎,建議用Python Programming為參考書。這本書是計算機導論性質的教材,不需要程式設計基礎。
- 物件導向,包括物件導向的基本概念,類,方法,屬性,繼承等。Python是物件導向的語言,“一切皆物件”。物件導向是很難迴避的。Python的物件導向機制是相對比較鬆散的,不像Java和C++那麼嚴格。好處是容易學,容易維護,壞處是容易犯錯。
- 應用功能,包括IO,資料容器如表和詞典,內建函式,模組,格式化字串等。這些在其它語言中也經常出現,有比較強的實用性。
- 高階語法,上下文管理器,列表推導,函數語言程式設計,裝飾器,特殊方法等。這些語法並不是必須的,你可以用前面比較基礎的語法實現。學這些高階語法的主要原因是:它們太方便了。比如列表推導一行可以做到的事情,用迴圈結構要好幾行才行。
學習Python主體最好的參考書是Learning Python,它非常全面,滿滿的都是乾貨。雖然很厚,讀起來並不難讀。另一個是參考官網的教程Python.org
Python號稱“Battery Included”,也就是說,功能都已經包含在了語言中。這一自信,主要來自Python功能全面的標準庫。標準庫提供了許多功能模組,每個模組是某一方面功能的介面,比如檔案管理,作業系統互動,字元處理,網路介面,編碼加密等等。
The Python Standard Library中,你可以看到標準庫模組的列表。這裡也是標準庫最好的學習資料。如果想找書,我只看到過兩本關於標準庫的:
Python Essential Reference
The Python Standard Library by Example
說實話,這兩本都不算很好的標準庫教材,而標準庫的參考書也確實很難寫。因為標準庫只是呼叫功能的介面,最終實現的是Python和系統的互動。這需要很強的系統知識,比如檔案系統知識,程式管理,http原理,socket程式設計,資料庫原理…… 如果這些知識都已經準備充分,那麼標準庫學起來完全沒有難度。然而,這些背景知識的學習曲線,要遠遠陡過Python本身。
更深入的Python學習也是如此,需要大量的背景知識,而不止是Python自身。如果你對Python的擴充性感興趣,可以多多嘗試混合程式設計。如果你對Python的編譯和執行機制感興趣,你可以往Python底層這一深度挖,看看編譯器是怎麼做的。如果你對應用感興趣,你可以多學習幾個自己用的上的第三方包。學到這個時候,拼的是境界,也沒有什麼定法。廣闊空間,留待探索。
基本上,學過主體內容之後,Python還是要靠做專案來練習。有不少小練習題型別的資料,比如Python Cookbook。但更好的方式是自己去想一些應用場景,用Python來解決。比如:
- 建設一個網站
- 做一個網頁爬蟲
- 系統管理
Python功能全面,所以不要擔心自己想的問題Python解決不了 (基本上Python解決不了的問題,別的語言也沒戲)。比如我學習多執行緒的動力,就因為要並行的下載大量的檔案。基本上一個專案下來,會用到Python好幾塊的內容,知識會特別鞏固。
最後,和其它任何知識的學習一樣,筆記和總結很重要。在看參考書和看網頁時,可以做一些筆記。等到學了一段時間後,可以把筆記整理成更有條理的參考卡片(reference card),或者寫部落格。
長路漫漫,與諸君共勉。
(編後語: 參考書以及介紹見豆列)