寫(xiě)了將近兩年的Python快速教程,終于大概成形。這一系列文章,包括Python基礎(chǔ)、標(biāo)準(zhǔn)庫(kù)、Django框架。前前后后的文章,包含了Python最重要的組成部分。這一內(nèi)容的跨度遠(yuǎn)遠(yuǎn)超過(guò)我的預(yù)期,也超過(guò)了我看過(guò)的任何Python相關(guān)書(shū)籍。最初動(dòng)筆的原因,除了要總結(jié),還對(duì)很多Python書(shū)和教程覺(jué)得不滿意,覺(jué)得太晦澀,又不夠全面?,F(xiàn)在,我比較確定,參考我在Linux、網(wǎng)絡(luò)、算法方面的總結(jié),讀者可以在無(wú)基礎(chǔ)的背景下,在短時(shí)間,有深度的學(xué)習(xí)Python了。
這一篇也是尾聲。準(zhǔn)備在一個(gè)長(zhǎng)的時(shí)間內(nèi),停止更新Python快速教程,把精力集中在其它方面。畢竟一件事情做久了,會(huì)缺乏自我突破。編程是一個(gè)很有創(chuàng)新性,很需要突破自我的工作。在一個(gè)方面待久了,自己都會(huì)覺(jué)得發(fā)餿。而未知的計(jì)算機(jī)領(lǐng)域中,還有很多有趣的技術(shù)值得更深入的學(xué)習(xí)。另一方面,Python用舒服了,導(dǎo)致我一想到問(wèn)題,基本都是Python的思路。這樣,Python就成了我的舒服區(qū)域。我懶得去想,Java會(huì)如何解決,Scala會(huì)如何解決,C會(huì)如何解決。成長(zhǎng)的空間被壓縮得很小。為了自己能前進(jìn),要打破這個(gè)舒適區(qū)。
謝謝各位閱讀這些的Python文章。你們的支持是我走到現(xiàn)在的最大動(dòng)力。希望這些技術(shù)文章能點(diǎn)綴你的閑暇。如果再能有一些具體的幫助,那就最好不過(guò)了。
下面是我在知乎回答的一個(gè)帖子“你是如何自學(xué)Python的”,略做修改,作為總結(jié):
我是自學(xué)的Python。從對(duì)Python一無(wú)所知,到在博客上寫(xiě)Python相關(guān)的系列文章,期間有不少門(mén)檻,但也充滿樂(lè)趣。樂(lè)趣是自學(xué)的最大動(dòng)力。Python是一個(gè)容易編寫(xiě),又功能強(qiáng)大的動(dòng)態(tài)語(yǔ)言。使用Python,可以在短短幾行內(nèi)實(shí)現(xiàn)相當(dāng)強(qiáng)大的功能。通過(guò)自己寫(xiě)一些小程序,迅速的看到效果,發(fā)現(xiàn)問(wèn)題,這是學(xué)習(xí)Python最便利的地方。在《黑客與畫(huà)家》中,Paul也說(shuō),動(dòng)態(tài)語(yǔ)言可以給Hacker們更多涂涂畫(huà)畫(huà)的快感。這深得我心。
在學(xué)習(xí)Python之前,可以了解一下Python的特點(diǎn)和設(shè)計(jì)理念(Python簡(jiǎn)史)。在設(shè)計(jì)之初,Python就試圖在復(fù)雜、強(qiáng)大的C和方便、功能有限的bash之間,找到一個(gè)平衡點(diǎn)。Python的語(yǔ)法比較簡(jiǎn)單,用起來(lái)很方便,因此有些人把它當(dāng)作腳本語(yǔ)言使用。但Python要比普通的腳本語(yǔ)言功能強(qiáng)大很多。通過(guò)良好的可拓展性,Python的功能相當(dāng)全面,應(yīng)用面很廣:web服務(wù)器,網(wǎng)絡(luò)爬蟲(chóng),科學(xué)運(yùn)算,機(jī)器學(xué)習(xí),游戲開(kāi)發(fā)…… 當(dāng)然,天下沒(méi)有免費(fèi)的午餐,也沒(méi)有完美的語(yǔ)言,Python為了達(dá)到上述兩點(diǎn),有意的犧牲了Python的運(yùn)行速度。如果你是在編寫(xiě)高業(yè)務(wù)量、運(yùn)算量的程序,可能Python并不是最好的選擇。
-----
Python的主體內(nèi)容大致可以分為以下幾個(gè)部分:
面向過(guò)程。包括基本的表達(dá)式,if語(yǔ)句,循環(huán),函數(shù)等。如果你有任何一個(gè)語(yǔ)言的基礎(chǔ),特別是C語(yǔ)言的基礎(chǔ),這一部分就是分分鐘了解下Python規(guī)定的事。如果你沒(méi)有語(yǔ)言基礎(chǔ),建議用Python Programming為參考書(shū)。這本書(shū)是計(jì)算機(jī)導(dǎo)論性質(zhì)的教材,不需要編程基礎(chǔ)。
面向?qū)ο?,包括面向?qū)ο蟮幕靖拍?,類,方法,屬性,繼承等。Python是面向?qū)ο蟮恼Z(yǔ)言,“一切皆對(duì)象”。面向?qū)ο笫呛茈y回避的。Python的面向?qū)ο髾C(jī)制是相對(duì)比較松散的,不像Java和C++那么嚴(yán)格。好處是容易學(xué),容易維護(hù),壞處是容易犯錯(cuò)。
應(yīng)用功能,包括IO,數(shù)據(jù)容器如表和詞典,內(nèi)置函數(shù),模塊,格式化字符串等。這些在其它語(yǔ)言中也經(jīng)常出現(xiàn),有比較強(qiáng)的實(shí)用性。
高級(jí)語(yǔ)法,上下文管理器,列表推導(dǎo),函數(shù)式編程,裝飾器,特殊方法等。這些語(yǔ)法并不是必須的,你可以用前面比較基礎(chǔ)的語(yǔ)法實(shí)現(xiàn)。學(xué)這些高級(jí)語(yǔ)法的主要原因是:它們太方便了。比如列表推導(dǎo)一行可以做到的事情,用循環(huán)結(jié)構(gòu)要好幾行才行。
學(xué)習(xí)Python主體最好的參考書(shū)是Learning Python,它非常全面,滿滿的都是干貨。雖然很厚,讀起來(lái)并不難讀。另一個(gè)是參考官網(wǎng)的教程Python.org
Python號(hào)稱“Battery Included",也就是說(shuō),功能都已經(jīng)包含在了語(yǔ)言中。這一自信,主要來(lái)自Python功能全面的標(biāo)準(zhǔn)庫(kù)。標(biāo)準(zhǔn)庫(kù)提供了許多功能模塊,每個(gè)模塊是某一方面功能的接口,比如文件管理,操作系統(tǒng)互動(dòng),字符處理,網(wǎng)絡(luò)接口,編碼加密等等。
The Python Standard Library中,你可以看到標(biāo)準(zhǔn)庫(kù)模塊的列表。這里也是標(biāo)準(zhǔn)庫(kù)最好的學(xué)習(xí)資料。如果想找書(shū),我只看到過(guò)兩本關(guān)于標(biāo)準(zhǔn)庫(kù)的:
Python Essential Reference
The Python Standard Library by Example
說(shuō)實(shí)話,這兩本都不算很好的標(biāo)準(zhǔn)庫(kù)教材,而標(biāo)準(zhǔn)庫(kù)的參考書(shū)也確實(shí)很難寫(xiě)。因?yàn)闃?biāo)準(zhǔn)庫(kù)只是調(diào)用功能的接口,最終實(shí)現(xiàn)的是Python和系統(tǒng)的互動(dòng)。這需要很強(qiáng)的系統(tǒng)知識(shí),比如文件系統(tǒng)知識(shí),進(jìn)程管理,http原理,socket編程,數(shù)據(jù)庫(kù)原理…… 如果這些知識(shí)都已經(jīng)準(zhǔn)備充分,那么標(biāo)準(zhǔn)庫(kù)學(xué)起來(lái)完全沒(méi)有難度。然而,這些背景知識(shí)的學(xué)習(xí)曲線,要遠(yuǎn)遠(yuǎn)陡過(guò)Python本身。
更深入的Python學(xué)習(xí)也是如此,需要大量的背景知識(shí),而不止是Python自身。如果你對(duì)Python的拓展性感興趣,可以多多嘗試混合編程。如果你對(duì)Python的編譯和運(yùn)行機(jī)制感興趣,你可以往Python底層這一深度挖,看看編譯器是怎么做的。如果你對(duì)應(yīng)用感興趣,你可以多學(xué)習(xí)幾個(gè)自己用的上的第三方包。學(xué)到這個(gè)時(shí)候,拼的是境界,也沒(méi)有什么定法。廣闊空間,留待探索。
基本上,學(xué)過(guò)主體內(nèi)容之后,Python還是要靠做項(xiàng)目來(lái)練習(xí)。有不少小練習(xí)題類型的資料,比如Python Cookbook。但更好的方式是自己去想一些應(yīng)用場(chǎng)景,用Python來(lái)解決。比如:
建設(shè)一個(gè)網(wǎng)站
做一個(gè)網(wǎng)頁(yè)爬蟲(chóng)
系統(tǒng)管理
Python功能全面,所以不要擔(dān)心自己想的問(wèn)題Python解決不了 (基本上Python解決不了的問(wèn)題,別的語(yǔ)言也沒(méi)戲)。比如我學(xué)習(xí)多線程的動(dòng)力,就因?yàn)橐⑿械南螺d大量的文件?;旧弦粋€(gè)項(xiàng)目下來(lái),會(huì)用到Python好幾塊的內(nèi)容,知識(shí)會(huì)特別鞏固。
最后,和其它任何知識(shí)的學(xué)習(xí)一樣,筆記和總結(jié)很重要。在看參考書(shū)和看網(wǎng)頁(yè)時(shí),可以做一些筆記。等到學(xué)了一段時(shí)間后,可以把筆記整理成更有條理的參考卡片(reference card),或者寫(xiě)博客。
更多信息請(qǐng)查看IT技術(shù)專欄