漫談Python(0)


0. 前言

2015年,9月. 李狗剩大學(xué)畢業(yè),順利地考入了當(dāng)?shù)氐囊凰髮W(xué).正式的成為了一名研究生. 他滿懷著碩士生涯的憧憬撥打了導(dǎo)師的電話:

一番寒暄之后,二人開始切入正題....

"小李啊,9月份就可以正式入學(xué)了, 讀研期間你得有自己的目標(biāo)啊. 要嚴(yán)格的要求自己.這個暑假啊,最好是把Python自己先看一遍, 最好提前來實(shí)驗(yàn)室. 有什么事情我們QQ聯(lián)系,祝你好運(yùn)."

....

接完電話, 小李一臉茫然: Python 是什么鬼啊? 這東西能干什么?

1. 什么Python

狗剩剛開始接觸Python,首先想到的是上往查資料. 結(jié)果看完網(wǎng)上的博客和教程之后更加茫然了. 有人說 python 是腳本語言; 有人說Python 是面向?qū)ο蟮母呒壵Z言;還有人說python是"膠水",可以粘合著各種其他的語言; 這些人說的都很有道理, 那么到底誰說的對呢? 小李開始又開始迷茫了... 于是,開始求助坐在旁邊的師兄--志強(qiáng).

"小李, 這些說法啊", 志強(qiáng)深深的吸了一口氣,故作姿態(tài)的說:" 都對 . 每個人都有自己對事物的看法,不同的人在不同的階段對同一件事情會有不同的看法,這看起來有點(diǎn)像哲學(xué)的歷史唯物主義,但道理同樣適用于對計算機(jī)語言學(xué)習(xí). 可能現(xiàn)在你不理解,但是接觸一定的時間以后你會發(fā)現(xiàn)他們說的都是對的,那么Python 比較官方的解釋是什么呢? 來讓我們看看python 官方文檔[2]的解釋 ..."

Python is an interpreted, interactive, object-oriented

programming language. It incorporates modules, exceptions,

dynamic typing, very high level dynamic data types, and

classes. Python combines remarkable power with very clear

syntax. It has interfaces to many system calls and libraries,

as well as to various window systems, and is extensible in C

or C++. It is also usable as an extension language for

applications that need a programmable interface. Finally,

Python is portable: it runs on many Unix variants, on the

Mac, and on PCs under MS-DOS, Windows, Windows NT, and OS/2.

大致就是說:

Python是一種解釋型,交互式的面向?qū)ο缶幊陶Z言。

它包含模塊,異常,動態(tài)類型,高級動態(tài)數(shù)據(jù)類型和類。

Python結(jié)合了卓越的功能和非常清晰的語法。

它具有許多系統(tǒng)調(diào)用和庫以及各種窗口系統(tǒng)的接口,并且可以在C或C ++中擴(kuò)展。 它也可用作需要可編程接口的應(yīng)用程序的擴(kuò)展語言。

最后,Python是可移植的:它運(yùn)行在許多Unix變體,Mac上,以及MS-DOS,Windows,Windows NT和OS / 2下的PC上。

小李看完了Python 的權(quán)威解釋, 瞬間明白了:" 原來,python和男人一樣,不只有一面."

志強(qiáng): "老弟, 你這樣給七匹狼打廣告合適么? "


Python是一門優(yōu)雅而且健壯的語言,它繼承了傳統(tǒng)編譯語言的強(qiáng)大性和通用型;同時它還借鑒了簡單腳本和解釋語言的易用性.

1.1 對Python 是一個高層次的結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言. 的理解

解釋性和編譯性

Python 是一種解釋性語言,這意味著開發(fā)過程中沒有了編譯環(huán)節(jié). 一般來說,由于不是本地機(jī)器碼運(yùn)行,純碎的解釋性語言要比編譯型語言運(yùn)行的慢. Python實(shí)際上是字節(jié)編譯的(類似的還有java) , 其結(jié)果就是可以生成一種近似于機(jī)器語言的中間形式. 這種方式比僅僅可以提高Python 性能,同時還保持了解釋性語言的優(yōu)點(diǎn).

PS: Python 的源文件常常是*.py , 當(dāng)源文件被解釋器加載或者顯示的進(jìn)行字節(jié)碼編譯的時候會編譯成字節(jié)碼文件,字節(jié)碼問價通常是*.pyc 或者是*.pyo這樣的擴(kuò)展名(類似于java 的 *.class 文件); 關(guān)于擴(kuò)展名知識, 在隨后會涉及到,這里先大致了解一下;

那么根據(jù)Python 的這個特點(diǎn),我們也可以知道: Python 可以像Java一樣可具有移植性;

面向?qū)ο?/h3>

python 絕對不像java一樣僅僅是一門面向?qū)ο蟮恼Z言;實(shí)際上它借鑒了很多編程思想, 還借鑒了Lisp和Haskell 這些函數(shù)式語言的特性; 在編程風(fēng)格中,初次使用它的程序員可能會感覺像javaScript

互動性(交互性)

Python 是不僅僅可以使用python 命令與運(yùn)行/編譯文件, 同時也可以用python 命令進(jìn)入交互頁面; 想要退出交互模式,輸入exit()即可

腳本語言

Python 可以像shell 腳本語言一樣的編寫程序.不需要main方法入口.

1.2 Python 印象

"呼~",小李聽完了志強(qiáng)介紹, 長舒一口氣,"原來Python有這么多的身份"

"是啊", 志強(qiáng)點(diǎn)點(diǎn)頭,對自己的師弟說:"看來你對Python已經(jīng)有一定了解了, 只需要多家動手練習(xí),假以時日一定會成為一個Python高手的. "

"恩恩 ~", 小李回答道.

"這樣,我在給你講講Python的起源吧, 以后出去了可以和別人吹吹牛逼" 志強(qiáng)看見小李聽得興奮,干脆在給他講一點(diǎn)背景知識.....

Python 起源

Guido Van Rossum 在1989年底創(chuàng)建了Python ,那個時候他孩子荷蘭的CWI(國家數(shù)學(xué)和計算科學(xué)研究院). 1991年初的時候,他發(fā)布了第一個Python 的公開發(fā)行版. Python 的起源似乎和C++/C/Java 一樣, 都是來自于某一個研究項(xiàng)目. 于是和其他的故事的開頭一樣: 項(xiàng)目中的那些程序員利用手邊現(xiàn)有的工具在工作的時候發(fā)現(xiàn)很棘手,于是他們設(shè)想并開發(fā)出了更好的解決方案.

那個時候van Rossum 是一位研究員對解釋性語言ABC有著豐富的設(shè)計經(jīng)驗(yàn)?zāi)? 但是這個人不滿足于ABC有限的開發(fā)能力, 他算得上是一位數(shù)學(xué)家, 他更加享受計算機(jī)帶來的樂趣。用他的話說,盡管擁有數(shù)學(xué)和計算機(jī)雙料資質(zhì),他總趨向于做計算機(jī)相關(guān)的工作,并熱衷于做任何和編程相關(guān)的活兒。

在那個時候,他接觸并使用過諸如Pascal、C、 Fortran等語言。這些語言的基本設(shè)計原則是讓機(jī)器能更快運(yùn)行。在80年代,雖然IBM和蘋果已經(jīng)掀起了個人電腦浪潮,但這些個人電腦的配置很低 (在今天看來)。比如早期的Macintosh,只有8MHz的CPU主頻和128KB的RAM,一個大的數(shù)組就能占滿內(nèi)存。所有的編譯器的核心是做優(yōu)化,以便讓程序能夠運(yùn)行。為了增進(jìn)效率,語言也迫使程序員像計算機(jī)一樣思考,以便能寫出更符合機(jī)器口味的程序。在那個時代,程序員恨不得用手榨取計算機(jī)每一寸的能力。有人甚至認(rèn)為C語言的指針是在浪費(fèi)內(nèi)存。至于動態(tài)類型,內(nèi)存自動管理,面向?qū)ο蟆?別想了,那會讓你的電腦陷入癱瘓。


Guido von Rossum


然而,這種思考方式讓Guido感到苦惱。Guido知道如何用C語言寫出一個功能,但整個編寫過程需要耗費(fèi)大量的時間 (即使他已經(jīng)準(zhǔn)確的知道了如何實(shí)現(xiàn))。他的另一個選擇是shell。Bourne Shell作為UNIX系統(tǒng)的解釋器(interpreter)已經(jīng)長期存在。UNIX的管理員們常常用shell去寫一些簡單的腳本,以進(jìn)行一些系統(tǒng)維護(hù)的工作,比如定期備份、文件系統(tǒng)管理等等。shell可以像膠水一樣,將UNIX下的許多功能連接在一起。許多C語言下上百行的程序,在shell下只用幾行就可以完成。然而,shell的本質(zhì)是調(diào)用命令。它并不是一個真正的語言。比如說,shell沒有數(shù)值型的數(shù)據(jù)類型,加法運(yùn)算都很復(fù)雜??傊瑂hell不能全面的調(diào)動計算機(jī)的功能。

(關(guān)于shell,你可以參考Linux架構(gòu)和Linux命令行與命令)

Guido希望有一種語言,這種語言能夠像C語言那樣,能夠全面調(diào)用計算機(jī)的功能接口,又可以像shell那樣,可以輕松的編程。ABC語言讓Guido看到希望。ABC是由荷蘭的CWI (Centrum Wiskunde & Informatica, 數(shù)學(xué)和計算機(jī)研究所)開發(fā)的。Guido在CWI工作,并參與到ABC語言的開發(fā)。ABC語言以教學(xué)為目的。與當(dāng)時的大部分語言不同,ABC語言的目標(biāo)是“讓用戶感覺更好”。ABC語言希望讓語言變得容易閱讀,容易使用,容易記憶,容易學(xué)習(xí),并以此來激發(fā)人們學(xué)習(xí)編程的興趣。

管已經(jīng)具備了良好的可讀性和易用性,ABC語言最終沒有流行起來。在當(dāng)時,ABC語言編譯器需要比較高配置的電腦才能運(yùn)行。而這些電腦的使用者通常精通計算機(jī),他們更多考慮程序的效率,而非它的學(xué)習(xí)難度。除了硬件上的困難外,ABC語言的設(shè)計也存在一些致命的問題:

可拓展性差。ABC語言不是模塊化語言。如果想在ABC語言中增加功能,比如對圖形化的支持,就必須改動很多地方。 不能直接進(jìn)行IO。ABC語言不能直接操作文件系統(tǒng)。盡管你可以通過諸如文本流的方式導(dǎo)入數(shù)據(jù),但ABC無法直接讀寫文件。輸入輸出的困難對于計算機(jī)語言來說是致命的。你能想像一個打不開車門的跑車么? 過度革新。ABC用自然語言的方式來表達(dá)程序的意義,比如上面程序中的HOW TO (如何)。然而對于程序員來說,他們更習(xí)慣用function或者define來定義一個函數(shù)。同樣,程序員也習(xí)慣了用等號(=)來分配變量。這盡管讓ABC語言顯得特別,但實(shí)際上增加了程序員的學(xué)習(xí)難度 (程序員大都掌握不止一種語言)。 傳播困難。ABC編譯器很大,必須被保存在磁帶(tape)上。當(dāng)時Guido在訪問的時候,就必須有一個大磁帶來給別人安裝ABC編譯器。 這樣,ABC語言就很難快速傳播。"

"等等, 所以這就是Python 產(chǎn)生原因吧", 小李迫不及待的開始說到.

"你可以這樣理解,其實(shí)當(dāng)時的ABC 的缺陷是一個客觀原因, 主觀的原因還是Guido 本人對事情的執(zhí)著于最求完美的態(tài)度",志強(qiáng)拿起旁邊的水杯喝了一口. "你先別急,我在給你繼續(xù)講一下,

Python語法很多來自C,但又受到ABC語言的強(qiáng)烈影響。來自ABC語言的一些規(guī)定直到今天還富有爭議,比如強(qiáng)制縮進(jìn)。但這些語法規(guī)定讓Python容易讀。另一方面,Python聰明的選擇服從一些慣例(特別是C語言的慣例)。比如使用等號賦值,使用def來定義函數(shù)。Guido認(rèn)為,如果“常識”上確立的東西,沒有必要過度糾結(jié)。

Python從一開始就特別在意可拓展性(extensibility)。Python可以在多個層次上拓展。從高層上,你可以引入.py文件。在底層,你可以引用C語言的庫。Python程序員可以快速的使用Python寫.py文件作為拓展模塊。但當(dāng)性能是考慮的重要因素時,Python程序員可以深入底層,寫C程序,編譯為.so文件引入到Python中使用。Python就好像是使用鋼構(gòu)建房一樣,先規(guī)定好大的框架。而程序員可以在此框架下相當(dāng)自由的拓展或更改。

最初的Python完全由Guido本人開發(fā)。Python得到Guido同事的歡迎。他們迅速的反饋使用意見,并參與到Python的改進(jìn)。Guido和一些同事構(gòu)成Python的核心團(tuán)隊(duì)。他們將自己大部分的業(yè)余時間用于hack Python (也包括工作時間,因?yàn)樗麄儗ython用于工作)。隨后,Python拓展到CWI之外。Python將許多機(jī)器層面上的細(xì)節(jié)隱藏,交給編譯器處理,并凸顯出邏輯層面的編程思考。Python程序員可以花更多的時間用于思考程序的邏輯,而不是具體的實(shí)現(xiàn)細(xì)節(jié) (Guido有一件T恤,寫著:人生苦短,我用Python)。這一特征吸引了廣大的程序員。Python開始流行。 "

"啊, 很棒,這個人愧是大牛", 李狗剩聽了志強(qiáng)的介紹逼近開始新潮澎湃.

志強(qiáng)說道: "那就好好學(xué)Python, 把 Python 掌握熟練吧. 時間不早了,該去吃飯了. 明天在給你講一下Python的內(nèi)存管理器; 然后在你電腦里面安裝Python 吧"

"哈哈, 學(xué)長. 我用的是linux 系列的操作系統(tǒng).自帶Python ",李狗剩得意的說道

"那也要學(xué)會安裝,以后要是想升級Python 版本或者是寫在Python 怎么辦? 做事情啊,還是要用心.把windows/macOS和Ubuntu下的安裝一遍, 再寫一個安裝手冊發(fā)給老師吧", 志強(qiáng)聽了小李的話,急忙的開導(dǎo)他,"做事情啊,還是要認(rèn)真的. 尤其是咱們理工科專業(yè), 強(qiáng)調(diào)動手實(shí)踐. 別偷懶啊 "



參考資料:

why python

[2] General Information

[3]Python起源

[4] Guido

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容