寫了將近兩年的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),或者寫博客。