標籤:類型 指令碼語言 部分 進程 通過 vbscrip 本質 images 單行注釋
程式設計語言分類
1. 編譯型和解釋型
編譯型:有負責翻譯的程式來給原始碼進行轉換,產生可執行代碼。這個過程叫做編譯(compile),負責編譯的程式叫做編譯器(compiler)。原始碼進行編譯後會產生一個可執行檔。
編譯型語言操作過程:
優點:編譯器一般會有先行編譯的過程對代碼進行最佳化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程式執行效率高。可以脫離語言環境獨立運行。
缺點:編譯之後如果需要修改就需要整個模組重新編譯。編譯的時候根據對應的運行環境產生機器碼,不同的作業系統之間移植就會有問題,需要根據啟動並執行作業系統環境編譯不同的可執行檔。
解釋型:從字面上看,“編譯”和“解釋”的確都有“翻譯”的意思,它們的區別則在於翻譯的時機安排不大一樣。打個比方:假如你打算閱讀一本外文書,而你不知道這門外語,那麼你可以找一名翻譯,給他足夠的時間讓他從頭到尾把整本書翻譯好,然後把書的母語版交給你閱讀;或者,你也立刻讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,如果你想往回看某個章節,他也得重新給你翻譯。
優點:有良好的平台相容性,在任何環境中都可以運行,前提是安裝瞭解釋器(虛擬機器)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。
缺點:每次啟動並執行時候都要解釋一遍,效能上不如編譯型語言。
編譯型與解釋型,兩者各有利弊。前者由於程式執行速度快,同等條件下對系統要求較低,因此像開發作業系統、大型應用程式、資料庫系統等時都採用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可視為編譯語言,而一些網頁指令碼、伺服器指令碼及輔助開發介面這樣的對速度要求不高、對不同系統平台間的相容性有一定要求的程式則通常使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python等等。
動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。
(1)動態類型語言:動態類型語言是指在運行期間才去做資料類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變數指定資料類型,該語言會在你第一次賦值給變數時,在內部將資料類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種指令碼語言如VBScript也多少屬於動態類型語言。
(2)靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的資料類型是在編譯其間檢查的,也就是說在寫程式時要聲明所有變數的資料類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。
強型別定義語言和弱類型定義語言
(1)強型別定義語言:強制資料類型定義的語言。也就是說,一旦一個變數被指定了某個資料類型,如果不經過強制轉換,那麼它就永遠是這個資料類型了。舉個例子:如果你定義了一個整型變數a,那麼程式根本不可能將a當作字串類型處理。強型別定義語言是型別安全的語言。
(2)弱類型定義語言:資料類型可以被忽略的語言。它與強型別定義語言相反, 一個變數可以賦不同資料類型的值。
強型別定義語言在速度上可能略遜色於弱類型定義語言,但是強型別定義語言帶來的嚴謹效能夠有效避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否型別安全”之間是完全沒有聯絡的!
例如:Python是動態語言,是強型別定義語言(型別安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強型別定義語言(型別安全的語言)。
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即全域解譯器鎖(Global Interpreter Lock),是電腦程式設計語言解譯器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是作業系統的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由作業系統調度線程的執行。一個python解譯器進程內有一條主線程,以及多條使用者程式的執行線程。即使在多核CPU平台上,由於GIL的存在,所以禁止多線程的並存執行。關於這個問題的折衷解決方案,我們在以後線程和進程章節裡再進行詳細探討。
學習之前,要瞭解二進位
原理和轉換
字元小知識
ASCII (不支援漢字)-->GB2312 (1980年): 7000+漢字-->GBK1.0 (1995):2W+漢字 --> GB18030 (2000年): 27XXX漢字
Unicode (兩個位元組,佔用記憶體)---> UTF-8(EN: 1 BYTE, CN: 3 BYTES)
Python不同版本對字元的處理
Python 2.x:預設為ASCII字元,使用中文前面要加註釋器 -*- coding:UTF-8 -*-
Python 3.x: 預設為UTF-8字元,預設支援中文
Python語言注釋
單行注釋:#
多行注釋:三個單引號或雙引號
基礎篇D1 -- Python學習之路