摘要:事實上,確實存在多種解釋器。在命令行下運行就是啟動解釋器。最常用的,自帶的就是這個是基于之上的一個交互式解釋器,也就是說,只是在交互方式上有所增強,但是執行代碼的功能和是完全一樣的。但是的解釋器很多,但使用最廣泛的還是。
</>復制代碼
以下資料大多參考的此篇博客:http://www.cnblogs.com/alex37...
基礎沖刺
編譯型語言:C、C++ 運行之前都需要一次編譯,編譯成可以直接和CPU打交道的機器碼,寫成可執行文件
? 可移植性不好。(C、C++Pascal)
解釋型語言:解釋型語言離不開解釋器,可移植性由于編譯型語言,由于解釋型程序將編譯過程放到了執行過程里
? 寫完可直接運行,但是這也注定了,解釋型語言比編譯型語言要慢上一大截,像幾百倍的速度差距也
? 不足為奇 (Java、perl、Python)
兩者的區別:編譯型程序,適合操作系統、大型應用程序、數據庫系統等項目的開發
解釋型程序,適合網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不同系統平臺間的兼容性有一定要求的程序
動態語言和靜態語言</>復制代碼
? 但是有一種新興的語言都有把兩者折中起來的趨勢,列如Java。他會編譯一次,但是沒有全部編譯,保留了高抽象的java代碼和一些機器碼。運行速度比Python快,而且“一次編譯,處處執行”。
通常我問所說的動態語言、靜態語言是指動態類型語言和靜態類型語言
動態類型語言:動態類型語言是指運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。
靜態類型語言:靜態類型語言與動態類型語言剛好相反,他的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的代表,其他的靜態類型語言還有C#、JAVA等。
強類型定義語言和弱類型定義語言強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量指定了某個數據類型,如果不經過強制轉換,那么他就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變量a,那么程序根本不可能將a當做字符串類型處理。強類型定義語言是類型安全的語言。
弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反,一個變量可以賦予不同數據類型的值。
Python的優缺點</>復制代碼
強類型定義語言在速度上可能遜色于弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是完全沒有聯系的!與其是否是強類型定義語言有關系!
先看優點:
Python的定位是“優雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常復雜的程序。
開發效率非常高,Python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,Python官方庫里都有相應的模塊進行支持,直接下載調動后,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重復造輪子。
高級語言,但你用Python語言編寫程序的時候,你無需考慮如何管理你的程序使用的內存一類的底層細節。
可移植性,由于它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴于系統的特性,那么你的所有Python程序無需修改就幾乎可以在市場上所有的系統平臺運行。
可擴展性,如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用他們。
可嵌入型,你可以把Python嵌入C/C++程序,從而向你的程序用戶提供腳本功能。
再看缺點:
速度慢,Python的運行速度相比C語言確實慢很多,跟Java相比也要慢一些,因此這也是很多所謂的大牛不屑于使用Python的主要原因,但其實這里所指的運行速度慢在大多數情況下用戶是無法直接感知到的,必須借助測試工具才能體現出來,比如你用C運行一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python開了10倍,算是非??鋸埩?,但是你無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小按單位是0.15-0.4s左右。其實大多數情況下Python已經完全可以滿足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種情況下當然還是建議你用C去實現的。
代碼不能加密,因為Python是解釋型語言,他的源碼都是以明文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源碼必須是加密的,那你一開始就不應該用Python去實現。
線程不能利用多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下執行。
IPython</>復制代碼
最常用的,Linux自帶的就是這個
IPython是基于CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。
CPython用>>>作為提示符,而IPython用In [`序號`]:作為提示符。
PyPyPyPy是另一個Python解釋器,它的目標是執行速度。PyPy采用JIT技術,對Python代碼進行動態編譯(注意不是解釋),所以可以顯著提高Python代碼的執行速度。
絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。如果你的代碼要放到PyPy下執行,就需要了解PyPy和CPython的不同點。
Jython</>復制代碼
PyPy是一個很快的解釋器,甚至有時候快過C語言
Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java字節碼執行。
IronPythonIronPython和Jython類似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的字節碼。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41738.html
閱讀 3475·2021-11-18 10:02
閱讀 3723·2021-09-13 10:25
閱讀 1931·2021-07-26 23:38
閱讀 2582·2019-08-30 15:44
閱讀 2288·2019-08-30 13:51
閱讀 1235·2019-08-26 11:35
閱讀 2280·2019-08-26 10:29
閱讀 3455·2019-08-23 14:56