教育的真諦就是當(dāng)你忘記一切所學(xué)的東西之后所剩下的東西
1.1 什么是Python
Python是一門(mén)優(yōu)雅而健壯的通用型編程語(yǔ)言原环,它功能強(qiáng)大,簡(jiǎn)單易學(xué)束莫。Python接近自然語(yǔ)言碧注,讀Python的代碼就像讀英文文檔一樣易于理解竖哩。
1.2 起源
大家好嘶窄,我是平頭哥怀跛。在今后的一段時(shí)間里,我會(huì)跟大家一起學(xué)習(xí)python柄冲。這次主要的參考書(shū)目為《Python核心編程》吻谋。書(shū)中提到的代碼我會(huì)全部用最新的Python 3.7.2重寫(xiě),代碼我會(huì)同步更新到github现横,大家有什么問(wèn)題可以跟我留言漓拾。再次感謝大家的支持阁最,閑言少敘,咱們現(xiàn)在進(jìn)入正題骇两。
python之父是 Guido van Rossum(吉多·范羅蘇姆),Guido van Rossum在荷蘭出生闽撤、成長(zhǎng),1982年在阿姆斯特丹大學(xué)獲得數(shù)學(xué)和計(jì)算機(jī)科學(xué)碩士學(xué)位脯颜。后來(lái)Guido van Rossum在荷蘭阿姆斯特丹的國(guó)家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究學(xué)會(huì)(CWI)工作。曾參與開(kāi)發(fā)解釋型編程語(yǔ)言ABC贩据,因不滿足ABC語(yǔ)言的開(kāi)發(fā)能力栋操,于1989年底創(chuàng)造Python,于1991年初發(fā)布了第一個(gè)Python發(fā)行版饱亮。
1.3 特點(diǎn)
1.3.1 高級(jí)
Python具有高級(jí)的數(shù)據(jù)結(jié)構(gòu)矾芙,例如內(nèi)置的列表(大小可變數(shù)組)和字典(哈希表)。
1.3.2 面向?qū)ο?/h3>
Python支持面向過(guò)程編程近上,面向?qū)ο缶幊烫尴埽瘮?shù)式編程。
1.3.3 可升級(jí)
Python提供了基本的開(kāi)發(fā)模塊壹无,你可以在它上面開(kāi)發(fā)你的軟件葱绒,而當(dāng)這些需要拓展和增長(zhǎng)時(shí),Python的可插入性和模塊化架構(gòu)能使你的項(xiàng)目生機(jī)盎然和易于管理斗锭。
1.3.4 可拓展
Python支持使用C地淀、C++、Java岖是、C#帮毁、Golang等語(yǔ)言為其寫(xiě)拓展模塊,已達(dá)到性能等顯著提升豺撑。
1.3.5 可移植
我們通常所說(shuō)的Python是指的CPython烈疚,是由C語(yǔ)言編寫(xiě)而出。C語(yǔ)言有較強(qiáng)的可移植性聪轿,使得Python可以運(yùn)行在任何帶有ANSI C編譯器的平臺(tái)上爷肝。盡管有一些針對(duì)不同平臺(tái)開(kāi)發(fā)的特定模塊,但是在任何一個(gè)平臺(tái)上用Python開(kāi)發(fā)的通用軟件都可以稍適修改或原封不動(dòng)地在其他平臺(tái)上運(yùn)行屹电。這種可移植性即適用于不同都架構(gòu)阶剑,也適用于不同的操作系統(tǒng)。
1.3.6 易學(xué)
Python關(guān)鍵字少危号、結(jié)構(gòu)簡(jiǎn)單牧愁、語(yǔ)法清晰。小學(xué)生都能學(xué)會(huì)外莲。
1.3.7 易讀
Python接近自然語(yǔ)言猪半,讀Python的代碼就像讀英文文檔一樣易于理解兔朦。
1.3.8 易于維護(hù)
Python本身就易于學(xué)習(xí)于閱讀,它的維護(hù)成本也相對(duì)較低磨确。
健壯性
一旦你的Python程序由于錯(cuò)誤崩潰沽甥,Python解釋器就會(huì)轉(zhuǎn)向一個(gè)堆棧跟蹤,那里面有可用到的全部信息乏奥,包括你程序崩潰的原因摆舟,以及是哪段代碼出錯(cuò)了。這些錯(cuò)誤被稱為異常邓了。如果在運(yùn)行時(shí)發(fā)生這樣的錯(cuò)誤恨诱,Python使你能夠監(jiān)控這些錯(cuò)誤并進(jìn)行處理。
針對(duì)異称可以采取相應(yīng)的措施照宝,例如解決問(wèn)題、重定向程序句葵、執(zhí)行清除或維護(hù)步驟厕鹃、正常關(guān)閉應(yīng)用程序,亦或干脆忽略掉乍丈。無(wú)論如何剂碴,這些都可以有效地縮減開(kāi)發(fā)周期中都調(diào)試環(huán)節(jié)。
1.3.10 高效的快速原型開(kāi)發(fā)工具
Python有許多面向其他系統(tǒng)的接口诗赌,它的功能強(qiáng)大汗茄,所以完全可以用Python開(kāi)發(fā)整個(gè)系統(tǒng)的原型。實(shí)際上在工作中我也是這么干的铭若,一般是先用Python快速實(shí)現(xiàn)產(chǎn)品原型洪碳,后續(xù)用編譯型語(yǔ)言(C、C++叼屠、Go等)進(jìn)行優(yōu)化瞳腌。傳統(tǒng)的編譯型語(yǔ)言也能實(shí)現(xiàn)同樣的系統(tǒng)建模,但是Python工程方面的簡(jiǎn)潔性可以讓我們?cè)谧疃痰臅r(shí)間內(nèi)游刃有余的完成相同的工作镜雨。Python庫(kù)多嫂侍,無(wú)論你打算開(kāi)發(fā)什么樣的應(yīng)用都能找到相應(yīng)的模塊和包幫你實(shí)現(xiàn)。
1.3.11 內(nèi)存管理器
C和C++最大的弊病在于內(nèi)存管理由開(kāi)發(fā)者負(fù)責(zé)(當(dāng)然從另外一個(gè)角度來(lái)看這也是C和C++的優(yōu)點(diǎn))荚坞,所以哪怕是一個(gè)很少訪問(wèn)挑宠、修改和管理內(nèi)存的應(yīng)用程序,程序員也必修在執(zhí)行了基本任務(wù)之外履行這些職責(zé)颓影。這些加在開(kāi)發(fā)者身上的沒(méi)有必要的負(fù)擔(dān)和職責(zé)常常會(huì)分散經(jīng)歷各淀。
在Python中,由于內(nèi)存管理是由Python解釋器負(fù)責(zé)的诡挂,所以開(kāi)發(fā)人員就可以從內(nèi)存事務(wù)中解放出來(lái)碎浇,全神貫注于最直接的目標(biāo)临谱。這會(huì)使錯(cuò)誤更少、程序更健壯奴璃、開(kāi)發(fā)周期更短悉默。
1.3.12 解釋性和(字節(jié))編譯性
Python是一種解釋型語(yǔ)言,這意味著開(kāi)發(fā)過(guò)程中沒(méi)有編譯這個(gè)環(huán)節(jié)苟穆。一般來(lái)說(shuō)抄课,由于不是以本地機(jī)器碼運(yùn)行,純粹的解釋型語(yǔ)言比編譯型語(yǔ)言運(yùn)行得慢雳旅。然而剖膳,類似于Java,Python實(shí)際上是字節(jié)編譯的岭辣,其結(jié)果就是可以生成一種接近機(jī)器碼語(yǔ)言的中間形式。這不僅改善了Python的性能甸饱,還同時(shí)使它保持了解釋型語(yǔ)言的優(yōu)點(diǎn)沦童。