本節書摘來自華章計算機《python硬體程式設計實戰》一書中的第1章,第1.2節,作者:李茂 著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
對于某種計算機語言,根據其特點和語言本身側重點的不同會有不同的分類和叫法。python作為計算機語言的其中一種也不例外。接下來就來詳細解釋python的各種不同的分類和叫法的詳細含義。
1.2.1 一種腳本語言
腳本的英文是script。一般的讀者看到script這個單詞往往首先想到的是電影的劇本,我們大多數人都知道電影劇本其實就是由一段段的腳本所組成的,即電影劇本的腳本決定了電影中的人和物要做哪些事情以及具體怎麼做。
與之類似,計算機中的腳本決定了計算機中的作業系統和各種軟體工具要做哪些事情以及具體怎麼做。
此外,根據筆者的了解,腳本這個詞還會讓人有另外一種感覺:随性。
所謂的随性就像在現實中寫電影腳本,直接拿張紙和一支筆就可以寫了,寫完之後就可以拿去使用,即拍電影了。而對應的計算機中的腳本也是類似的過程,使用者想要實作一個功能,在構思了如何做之後,就可以直接找個文本編輯器寫上對應的腳本,也就是普通的文本,接着讓計算機去運作,進而實作想要的功能。當然計算機腳本與電影腳本也有不同之處:計算機中的腳本所運作的環境中有對應的腳本解析器,可以解釋并執行對應的腳本。
例如,若建立linux中的shell腳本,可以先建立一個普通文本檔案,然後在其中添加shell腳本代碼,儲存檔案,接着就可以在linux的帶有shell解釋功能的環境中運作了。
那些相對“随性”的腳本語言來說不那麼“随性”的非腳本語言叫作編譯型語言,比如c語言,它們需要再加上編譯這個步驟之後才能生成可以運作的程式,然後才能執行程式。
編譯型語言和腳本語言的對比
(1)編譯型語言
簡單地說,編譯性語言就是需要用該語言的編譯器将源代碼編譯為可執行程式,然後才能運作可執行程式的語言。此編譯過程需要先将源代碼編譯為目标檔案,然後把目标檔案加上必要的庫檔案,最後再連結為最終的可執行檔案。
(2)腳本語言
腳本語言是無需用編譯器編譯源代碼,可直接運作該源碼形式腳本檔案的語言。而直接能夠運作腳本檔案的背後,是目前環境中存在着此腳本的解析器。解析器負責讀入此腳本源碼,以及後續解析并執行的動作。
編譯型語言和腳本語言的執行示例
(1)編譯型語言的執行
編譯型語言的執行過程為
源代碼?(用編譯器編譯成)可執行程式?運作程式(可執行檔案)
以在安裝了visual studio 2010的windows 7中編譯運作c語言為例,其過程為
hello.c?(用編譯器cl編譯為)hello.exe?運作hello.exe
其中,hello.c是先被編譯器cl編譯為目标檔案hello.obj,然後再調用link将目标檔案hello.obj連結為可執行檔案hello.exe的。
(2)腳本語言的執行
腳本語言的執行過程為:
源代碼?直接(在具有了解析器的環境中)運作程式(腳本源碼)
以在安裝了python的windows中運作python腳本為例,其過程為:
demopython.py?(直接在有了python解析器python.exe的環境中)運作demopython.py
其中,python.exe是安裝了python時就會被安裝的python解釋器,負責解析并運作python腳本檔案。
1.2.2 一種解釋型語言
我們有時候也會把python稱為一門解釋型語言。這是因為腳本語言的天然特點之一就是解釋性,而作為腳本語言的python是以也可以被稱為是一門解釋型語言。
什麼是解釋型語言
腳本語言的特點是在具有解釋器的環境中,以源代碼的形式而無需編譯就可以直接執行。腳本語言的内部執行過程是首先由解析器一行一行地讀取腳本的源代碼,同時解析每一行,然後給出執行後的結果。通俗地說就是:讀一行,解釋一行,執行一行。由此,腳本語言就天然地具有了解釋性的特點,是以腳本語言也常被稱為解釋型語言。
1.2.3 一種進階語言
在解釋python為何是一種進階語言之前先來解釋一下什麼是進階語言。
什麼是進階語言
事物的發展都是從低級走向進階的,計算機語言的發展也不例外。早期的計算機語言大多數都是針對硬體上的機器本身所開發的語言,一般叫作彙編語言。彙編語言之是以常被稱為低級語言,是因為其語言本身直接和硬體打交道,而缺少對計算機細節的抽象,相對而言不是那麼易于程式員了解和使用。
随着計算機語言的發展,出現了對計算機細節更宏觀抽象的語言,這類語言更多地采用人類更容易了解的元素和概念,是以對于程式員來說,相對更容易了解、學習、掌握和使用這類語言,而這類語言被稱為進階語言。常見的一些進階語言有fortran、pascal、lisp、c、c++、java、c#、python、ruby等。
進階語言和低級語言的對比
進階語言在本身的設計層面會考慮到對計算機細節的封裝和抽象。
比如一個普通的計算機語言概念中的數組,在常見的進階語言中有具體的實作,程式員可以很友善地直接拿來使用。而作為大多是彙編語言的低級語言,它們對于數組的實作和使用則很複雜,需要手動去寫很多複雜的彙編代碼才能使用。因為彙編語言等低級語言和底層硬體有關系,比如不同的cpu會有不同的指令集和不同的寄存器等各種内部資源,是以要具體實作數組這樣的功能時,會有千差萬别,需要考慮到很多細節和不同的實作方式,需要每個程式員對目前所使用的cpu的所有架構、内部資源等細節都很清楚,同時也需要對目前特定cpu的指令的文法都很清楚。在此前提下,才可以寫出對應的彙編代碼,才可以實作對應的數組。
由此可見,彙編語言會涉及太多實體層面上和硬體上的實作細節,不利于人類以普通的邏輯去了解,更難學習和掌握。而相對來說,進階語言涉及的基本元素和概念和人類的思維很相似,是以進階語言對于程式員來說更加容易了解、學習和掌握。
然後我們再來具體地解釋為何python是其中一種進階語言。python在語言設計的時候,和其他進階語言類似,也完全具有常用的各種基本元素,比如各種普通變量、清單、函數等内容,完全符合人類的邏輯,易于了解、學習和掌握,是以python本身的确是一種進階語言。
1.2.4 一種面向對象的語言
在解釋為何python是一種面向對象的語言之前,先來簡要介紹一下什麼是面向對象的語言。
什麼是面向對象的(進階)語言
首先要明确的是,面向對象的計算機語言這個概念是針對進階語言來說的。其次,在一堆進階語言裡面,有些是在設計該語言本身時,對于語言本身的基本元素是以對象的方式設計的,而不同的對象之間的互動則成為整個程式運作的主要表現形式。
此處的對象往往和現實中的物體、概念、邏輯的整體等内容是一一對應的關系。由于程式員用基于對象的程式設計語言設計程式時往往更加直覺和易于了解,更加容易簡化問題的處理邏輯,是以相對而言,面向對象的語言簡化了使用該語言解決實際問題的複雜度,提高了處理事情的效率,是以程式員更容易了解、學習、掌握和使用。
而python語言本身的設計也是基于對象的,也是面向對象的各種概念和邏輯的,是以說python也是一種面向對象的程式設計語言。
有了前面介紹的對于不同python稱謂的了解之後,我們再來總結一下作為計算機程式設計語言的python的常見且基本的定義:python是一種面向對象的、解釋型的計算機進階語言。
至此可能很多讀者才突然明白:哦,原來在各種資料或教程中所使用的python的上述定義背後,還隐含着如此多方面的含義,原來python的各種特點和稱謂是這麼回事。
如果讀者會有此感悟,則才真正實作了筆者寫本python教程要實作的目的:希望學習技術的讀者,不僅要知其然,也要知其是以然。将此邏輯應用到此處的含義就是:不僅要知道python是如此定義的,更要知道為何會有這樣的定義,即python如此定義背後的真正完整的含義。