基礎衝刺

如下資料大多參考的此篇博客: http://www.cnblogs.com/alex37...

基礎衝刺

編譯型語言:C、C++ 運行以前都須要一次編譯,編譯成能夠直接和CPU打交道的機器碼,寫成可執行文件html

​ 可移植性很差。(C、C++Pascal)java

解釋型語言:解釋型語言離不開解釋器,可移植性因爲編譯型語言,因爲解釋型程序將編譯過程放到了執行過程裏python

​ 寫完可直接運行,可是這也註定了,解釋型語言比編譯型語言要慢上一大截,像幾百倍的速度差距也算法

​ 不足爲奇 (Java、perl、Python)數據庫

二者的區別:

  • 編譯型程序,適合操做系統、大型應用程序、數據庫系統等項目的開發
  • 解釋型程序,適合網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不一樣系統平臺間的兼容性有必定要求的程序
​ 可是有一種新興的語言都有把二者折中起來的趨勢,列如Java。他會編譯一次,可是沒有所有編譯,保留了高抽象的java代碼和一些機器碼。運行速度比Python快,並且「一次編譯,到處執行」。

動態語言和靜態語言

一般我問所說的動態語言、靜態語言是指動態類型語言和靜態類型語言編程

  1. 動態類型語言:動態類型語言是指運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。
  2. 靜態類型語言:靜態類型語言與動態類型語言恰好相反,他的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明全部變量的數據類型,C/C++是靜態類型語言的表明,其餘的靜態類型語言還有C#、JAVA等。

強類型定義語言和弱類型定義語言

  1. 強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量指定了某個數據類型,若是不通過強制轉換,那麼他就永遠是這個數據類型了。舉個例子:若是你定義了一個整型變量a,那麼程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。
  2. 弱類型定義語言:數據類型能夠被忽略的語言。它與強類型定義語言相反,一個變量能夠賦予不一樣數據類型的值。
強類型定義語言在速度上可能遜色於弱類型定義語言,可是強類型定義語言帶來的嚴謹性可以有效的避免許多錯誤。另外,「這門語言是否是動態語言」與「這門語言是否類型安全」之間是徹底沒有聯繫的!與其是不是強類型定義語言有關係!

Python的優缺點

先看優勢:瀏覽器

  1. Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
  2. 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調動後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
  3. 高級語言,但你用Python語言編寫程序的時候,你無需考慮如何管理你的程序使用的內存一類的底層細節。
  4. 可移植性,因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺運行。
  5. 可擴展性,若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用他們。
  6. 可嵌入型,你能夠把Python嵌入C/C++程序,從而向你的程序用戶提供腳本功能。

再看缺點:安全

  1. 速度慢,Python的運行速度相比C語言確實慢不少,跟Java相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運行一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python開了10倍,算是很是誇張了,可是你沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小按單位是0.15-0.4s左右。其實大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下固然仍是建議你用C去實現的。
  2. 代碼不能加密,由於Python是解釋型語言,他的源碼都是以明文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源碼必須是加密的,那你一開始就不該該用Python去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Giobal Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底有操做系統調度線程的執行。一個Python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折中解決方法,咱們在之後線程和進程章節裏在進行詳細探討。

固然,Python還有一些其它的小缺點,在這就不一一列舉了,我想說的是,任何一門語言都不是完美的,都有擅長和不擅長作的事情,建議各位不要拿一個語言的劣勢去跟另外一個語言的優點來去比較,語言只是一個工具,是實現程序設計師思想的工具,就像咱們以前中學學幾什麼時候,有的時候須要要圓規,有的時候須要用三角尺同樣,拿相應的工具去作它最擅長的事纔是正確的選擇。以前不少人問我Shell和Python到底哪一個好?我回答說Shell是個腳本語言,但Python不僅是個腳本語言,能作的事情更多,而後又有鑽牛角尖的人說徹底不必學Python, Python能作的事情Shell均可以作,只要你足夠牛B,而後又舉了用Shell能夠寫俄羅斯方塊這樣的遊戲,對此我能說表達只能是,不要跟SB理論,SB會把你拉到跟他同樣的高度,而後用充分的經驗把你打倒。服務器

Python解釋器

當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py文件。網絡

因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。

CPython

當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。

CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。

最經常使用的,Linux自帶的就是這個

IPython

IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。

CPython用>>>做爲提示符,而IPython用In [`序號`]:做爲提示符。

PyPy

PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。

絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點

PyPy是一個很快的解釋器,甚至有時候快過C語言

Jython

Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。

IronPython

IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。

可是:Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。因此上面那些也就PyPy值得搞一搞~
相關文章
相關標籤/搜索