1、編程語言簡介python
編程語言主要從如下幾個角度進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言。程序員
1.編譯型跟解釋型數據庫
編譯型,其實他和彙編語言是同樣的,也是有一個負責翻譯的程序來對問咱們的源碼進行轉換,生成相對應的可執行代碼。這個過程說的專業點兒就稱爲編譯(Compile),而負責編譯的程序天然稱爲編譯器(Compile)。若是咱們寫的程序代碼包含在一個源文件中,那麼一般編譯以後就會直接生成一個可執行文件,咱們就能夠直接運行了。但對於一個比較發雜的項目,爲了方便管理,咱們一般吧代碼分散在各個源文件中,做爲不一樣模塊來組織。這是編譯各個文件時就會生成目標文件(Object file)而不是前面說的可執行文件。通常一個源文件的編譯都會對應一個目標文件。這些目標文件裏的內容基本上已是可執行代碼了,但因爲只是整個項目的一部分,因此咱們不能直接運行。待全部的源文件編譯都大功告成,咱們就能夠最後把這些半成品的目標文件打包成一個可執行文件了,這個工做由另外一個程序員負責完成,因爲此過程好像是把包含可執行代碼的目標文件鏈接裝配起來,因此又稱爲連接(Link),而負責連接的程序就叫作連接程序(Linker)。連接程序除了連接目標文件外,可能還有各類資源,像圖標文件啊、聲音文件啊什麼的,還要負責去除目標文件之間的冗餘重複代碼,等等。連接完成以後,通常就能夠獲得咱們想要的可執行文件了。編程
解釋型,從字面上看,「編譯」和「解釋」的確都有「翻譯」的意思,它們的區別在於翻譯的時機安排不大同樣。打個比方:假如你打算閱讀一本外文書,而你不知道這門外語,那麼你能夠找一名翻譯,給他足夠的時間讓他從頭至尾的吧這本書翻譯好,而後把書的母語版交給你閱讀;或者,你也可讓這名翻譯輔助你閱讀,讓他一句一句的給你翻譯,若是你想往回看某個章節,他也得從新給你翻譯。安全
兩種方式,前者就至關於咱們所說的編譯型:一次把全部的代碼轉換成機器語言,而後寫成可執行文件;然後者就至關於咱們要說的解釋型:在程序運行的前一刻,還只有源碼程序沒有可執行程序;而程序每執行到源碼程序的某一條指令,則會有一個稱之爲解釋程序的外殼程序將源代碼轉換成二進制代碼以供執行,總言之,就是不斷的解釋、執行、解釋、執行……因此,解釋型程序是離不開解釋程序的。像早期的BASIC就是一門經典的解釋型語言,要執行BASIC程序,就得進入BASIC環境,而後才能加載源文件,運行。 解釋型程序中,因爲程序老是以源碼的形式出現,所以只要有相應的解釋器,移植幾乎不成問題。編譯型程序雖然源碼也能夠移植,但前提是必須得針對不一樣的系統分別進行編譯,對於複雜的工程來講,的確實件不小的時間消耗,何況極可能一些細節的地方仍是要修改源代碼。並且,解釋型程序省卻了編譯的步驟,修改調試也比較方便,編輯完畢後便可當即運行,沒必要像編譯程序同樣每次進行小改動都要耐心等待漫長的Compiling...Linking...這樣的編譯連接過程。不過凡事都有利有弊,因爲解釋型程序是將編譯的過程放到執行過程當中,這就決定了解釋型程序註定要比編譯型程序慢上一大截,像幾百倍的差距也是不足爲奇的。服務器
編譯型與解釋性的區別:編程語言
編譯型與解釋型,二者各有利弊。前者因爲程序執行速度快,同等條件下對系統要求低,所以像開發操做系統、大型應用程序、數據庫系統等時都採用它,像C/C++、Pascal Pascal(Delphi)、VB等基本均可視爲編譯語言,而一些網頁腳本、服務器腳步及輔助開發接口這樣的速度要求不高、對不一樣系統平臺間的兼容性有必定要求的程序則一般使用解釋性語言,如Java、Javascript、VBSscript、Perl、Python等等。性能
但既然編譯型與解釋型各有優缺點又相互對立,因此一批新興的語言都有吧兩種語言折中起來的趨勢,例如Java語言雖然比較接近解釋型語言的特性,但在執行以前已經預先進行一次預編譯,生成的代碼是介因而機器碼和Java源代碼之間的中介代碼,運行的時候則由JVM(Java的虛擬機平臺,可視爲解釋器)解釋執行。它即保留了源代碼的高抽象、可移植的特色,又已經完成了對源碼的大部分編譯工做,因此執行起來比「純解釋型」程序要快不少。而像VB6(或者之前版本)、C#這樣的語言,雖然表面上看生成的是.exe可執行程序文件,但VB6編譯以後實際生成的也是一種中介碼,只不過編譯器在前面安插了一段自動調用某個外部解釋器的代碼(改解釋程序獨立與用戶編寫的程序,存放於系統的某個DLL文件中,全部以VB6編譯生成的可執行程序都要用它),已解釋執行實際的程序體。C#(以及其餘.net的語言編譯器)則是生成.net目標代碼,實際執行時則由.net解釋系統(就像JVM同樣,也是一個虛擬機平臺)進行執行。固然.net目標代碼已經至關「低級」,比較接近機器語言了,因此仍將其視爲編譯語言,並且其可移植度也沒有Java號稱的這麼強大,Java號稱是「一次編譯,處處執行」,而.net則是「一次編碼,處處編譯」。總之,隨着設計技術與硬件的不斷髮展,編譯型與解釋型兩種方式的界眼正在不斷變得模糊。編碼
2.動態語言與靜態語言spa
一般咱們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。
(1)動態類型語言:動態類型語言是指在運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其餘的各類腳本語言如VBScript多少屬於動態類型的語言。
(2)靜態類型語言:靜態類型語言與動態類型語言正好相反,它的數據類型是在編譯期間檢查的,也就是說在寫程序時要聲明全部變量的數據類型,C/C++是靜態類型語言的典型表明,其餘的靜態類型語言還有C#、JAVA等。
3.強類型定義語言和弱類型定義語言
(1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,若是不通過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:若是你定義了一個整型變量a,那麼程序根本不可能將a看成字符串類型處理。強類型定義語言是類型安全的語言。
(2)弱類型定義語言:數據類型能夠被忽略的語言,可是強類型定義語言帶來的嚴謹性可以有效的避免許多錯誤。另外,「這門語言不是動態語言」與「這門語言是否類型安全」之間是徹底沒有聯繫的!
例如:Python是動態語言,是強類型定義語言(類型安全的語言);VBScript是動態語言,是弱類型定義語言(類型不安全的語言);JAVA是靜態語言,是強類型定義語言(類型安全的語言)。
經過上面的介紹,咱們能夠得出,python是一門動態解釋性的強類型定義語言。