Python是一門編程語言

Python介紹

Python是一種跨平臺的計算機程序設計語言。是一種面向對象的動態類型語言,最初被設計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發。python的創始人為荷蘭人,吉多-范羅蘇姆(Guido van Rossum)。最初python被作為ABC語言的一種繼承。ABC是由Guido參加設計的一種教學語言。Guido認為,ABC這種語言非常優美和強大,是專門為非專業程序員設計的。但是ABC語言并沒有成功,Guido認為是其非開放造成的,于是決心在python中避免這個錯誤。同時,他還想實現在ABC中閃現過但未曾實現的東西。

Python在Guido手中誕生了,可以說,python是從ABC發展起來的,主要受到了Modula-3(另一種相當優美且強大的語言,為小型團體所設計的)的影響。并且結合了Unix shell和C的習慣。

由于python語言的簡潔性、易讀性以及可擴展性,在國外用python做科學計算的研究機構日益增多,一些知名大學已經采用Python來教授程序設計課程。比如卡耐基梅隆大學的編程基礎、麻省理工學院的計算機科學及編程導論就使用python語言講授。眾多開源的科學計算軟件包都提供了python的調用接口。例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫ITK。而python專用的科學計算擴展庫就更多了,例如這3個經典的科學計算擴展庫:NumPy、SciPy和matplotlib,它們分別為python提供了快速數組處理、數值運算以及繪圖功能。因此python語言極其眾多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數據、制作圖表,甚至開發科學計算應用程序。

Python特點

1.使用縮進,規范編碼習慣

Python在設計上堅持了清晰劃一的風格,這使得python成為一門易讀、易維護,并且被大量用戶所歡迎的、用途廣泛的語言。python的作者有意的設計限制性很強的語言,使得不好的編程習慣都不能通過編譯。其中很重要的一項就是python的縮進規則。通過強制程序員們縮進,python確實使得程序更加清晰和美觀。

2. 設計哲學:優雅、明確、簡單

Python開發者的哲學是“用一種方法,最好是只有一種方法來做一件事”。在設計python語言時,如果面臨多種選擇,python開發者一般都會拒絕花哨的做法,而選擇明確的沒有或者很少有歧義的語法。由于這種設計觀念的差異,python源代碼通常被認為比Perl具備更好的可讀性,并且能夠支撐大規模的軟件開發。這些準則被稱為python格言。在python解釋器內運行import this 可以獲得完整的列表。

3. Python是完全面向對象的語言

函數、模塊、數字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承。有益于增強源代碼的復用性。python支持重載運算符和動態類型。相對于Lisp這種傳統的函數式編程語言,python對函數式設計只提供了有限的支持。有兩個標準庫(functools,itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。

4. 可擴展性

Python本身被設計為可擴充的。并非所有的特性和功能都集成到語言核心。python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴充模塊。python編譯器本身也可以被集成到其它需要腳本語言的程序內。因此,很多人還把python作為一種“膠水語言”使用。使用python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然后用python或java/Go調用相應的模塊。

Python用途

Python是一種解釋型腳本語言,可以應用于:

Web和internet開發

科學計算和統計

人工智能

教育

桌面界面開發

軟件開發

后端開發

執行

Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(字節碼),然后再由Python Virtual Machine(Python虛擬機)來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。這里的高級并不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這么說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。基于C的Python編譯出的字節碼文件,通常是.pyc格式。除此之外,Python還可以以交互模式運行,比如主流操作系統Unix/Linux、Mac、Windows都可以直接在命令模式下直接運行Python交互環境。直接下達操作指令即可實現交互操作。

python編譯器與解釋器

一、數據的表示方式

數字的表示方式有很多種,常見的有二進制、八進制、十進制和十六進制。十進制我們都很熟悉。因為我們人有10個手指頭,我們對十進制有著天然的友好度。

對于計算機,則是使用二進制。因為計算機最小的計算單元是根據開關狀態高低電平來確定的,它只有開和關,高和低的概念,換成數學就是0和1的兩種。同樣的,在物理存儲方面,硬盤的磁道只能區分打孔和未打孔的狀態,也就是0和1兩種。同事二進制便于進行加減運算和計數編碼。二進制與十進制數易于互相轉換。二進制便于邏輯判斷(是或非),邏輯判斷通常也是兩種狀態,這和二進制很搭配。二進制表示數據還具有抗干擾能力強,可靠性高的特點,因為當受到一定程度的電磁干擾時,只要可以分辨出它是高電平還是低電平,至于高多少或低多少并不重要,就能區分0和1,這在網絡信號匯總,就是天生自帶抗干擾能力。

但是在人際交流上,二進制有致命的弱點,數字的書寫特別冗長,并且沒有人類可讀性!至于英語、函數對計算機而言更是天書。那么我們是怎么和計算機交流的呢?怎么將我們的英語或者漢語編碼成計算機能夠識別的二進制呢?

二、編程語言發展歷程

1. 打孔紙條

我們已經知道了計算機只讀懂機器語言,也就是二進制的數據表示方式,任何對它的操作和編碼,最終都要統一到這上面來,然后這是一個悲傷的故事。

image.png

起初,為了讓計算機按我們的想法工作,程序員不得不編寫計算機可以讀懂看明白執行的機器碼,也就是01010101的樣子,打孔字條就是這么干的。用打沒打孔來代表0和1。這樣雖然計算機可以無障礙閱讀,但是程序員就難受了,容易出錯、效率低、編寫困難、維護困難,可能就是個簡單的打印“hello world”就需要好幾米長的字條。這是根本無法進行下去的。

2. 匯編語言

image.png

匯編語言時一種可編輯器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符代替機器指令的操作碼,用地址符號或標號代替指令或操作數的地址。在不同的設備中,匯編語言對應著不同的機器語言指令集,通過匯編過程轉換成機器指令。也就是數據說不同平臺之間不可直接移植,它是平臺相關的,在這個硬件平臺寫的匯編程序,到另一套硬件上去是運行不了的。因為匯編語言通常被應用在底層,硬件操作和高要求的程序優化的場合。驅動程序、嵌入式操作系統和實時運行程序較多使用匯編語言。相比于機器碼,它更偏向人類的語言習慣,更易于編寫和閱讀,也就是有一點抽象符號概念化了,這大大提高了編程效率。但是,這依然是一種低級語言,還有改善和提高的空間。

3. C語言

在C語言之前其實還有很多低級語言,我們不關心它們。為了讓編程更簡單,更搞笑,聰明的計算機程序員,一步步發明了FORTRAN、BASIC、B等許多語言,然后在1972年誕生了無人不知,應用最廣,影響最深,至今仍然地位不可動搖的C語言。

image.png

C語言為什么這么厲害?歸根結底是一句話:直接操作硬件!同樣的算法,用C語言,其執行效率超過JAVA等語言很多。那可能有人會問,C和匯編和機器碼比呢?肯定是C慢,但是寫個匯編程序和寫個C程序的效率差別那就更大了。C語言在人類友好性和底層相關性上達到了一個高度的平衡。這兩者是互相矛盾的,不可同時兼得的。

C干了些什么?其實它就是在人類友好性方面相比以前跨出了更大一步。人類是方便了,可機器就迷糊了!你給我這么多字符都是啥意思?機器它只懂二級制啊!難么C的代碼是如何被執行的呢?這就得請出編譯器了!

編譯器將編程語言寫的代碼翻譯成機器能夠執行或者說“看懂”的二級制機器碼。

其實我們安裝JAVA也好,C也好,Python也罷,主要就是安裝這個編程語言的“編譯器”。

4. Python語言

在幾十年前,C語言時當之無愧的高級語言帶邊,現在也依然是語言排行榜第二的霸主。然后,在很多領域,它已經不太實用了,現今更主流的語言是那些上手快、簡單易懂,說白了就是門檻低的語言,讓更多的人能進入程序員行業,讓編程能更容易、更快是未來的發展趨勢。也就是說,需要進一步讓編程語言更貼近人類語言,更遠離機器語言。

三、編譯器與解釋器

編譯器/解釋器:高級語言與機器之間的翻譯官

都是將代碼翻譯成機器可以執行的二進制機器碼,只不過在運行原理和翻譯過程有不同而已。用一個通俗的例子進行比喻:我們去飯館吃飯,點了八菜一湯。編譯器的方式就是廚師把所有的菜給你全做好了,一起給你端上來,至于你在哪吃,怎么吃,隨便。解釋器的方式就是廚師做好一個菜給你上一個菜,你就吃這個菜,而且必須在飯店里吃。

1. 編譯器:先整體編譯在執行

編譯方式:運行速度快,但任何一個小改動都需要整體重新編譯。可脫離編譯環境運行。代表語言是C語言。

2. 解釋器:邊解釋邊執行

解釋方式:運行速度慢,但部分改動不需要整體重新編譯,不可脫離解釋器環境運行。代表語言是Python語言。

四、Python解釋器種類

Python有好幾種版本的解釋器:

CPython

官方版本的解釋器。這個解釋器是用C語言開發的,所以叫CPython。CPython是使用最廣的Python解釋器。我們通常說的、下載的、討論的、使用的都是這個解釋器。

IPython

基于CPython之上的一個交互式解釋器,在交互方式上有所增強,執行Python代碼的功能和CPython是完全一樣的。CPython用>>>作為提示符,而IPython用In[序號]:作為提示符。

PyPy

一個追求執行速度的Python解釋器。采用JIT技術,對Python代碼進行動態編譯(注意:不是解釋),可以顯著提高python代碼的執行速度。絕大部分的CPython代碼都可以在PyPy下運行,但還是有一些不同,這就導致相同的python代碼在兩種解釋器下執行可能會有不同的結果。

Jython

運行在java平臺上的Python解釋器,可以直接把python代碼編程Java字節碼執行。

IronPython

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

五、Python的運行機制

Python作為動態解釋性語言,其運行機制可參考下圖(圖片來自網絡,其中的“編譯器”是對解釋器的廣義稱呼):

image.png

都說解釋器慢,python也有想辦法提高一下運行速度,那就是使用pyc文件。這點參考了JAVA的字節碼做法,但并不完全雷同。

我們編寫的代碼一般都會保存在以.py為后綴的文件中。在執行程序時,解釋器逐行讀取源代碼并逐行解釋運行。每執行一次,就重復一次這個過程,這其中耗費了大量的重復性的解釋工作。為了減少這一重復性的解釋工作,python引入了pyc文件,pyc文件是將py文件的解釋結果保存下來的文件,這樣,下次再運行的時候就不用解釋了,直接使用pyc文件就可以了,這大大提高了程序運行速度。

對于pyc文件,必須知道一下幾點:

對于當前調用的主程序不會生成pyc文件;

以import xxx 或 from xxx import xxx等方式導入主程序的模塊才會生成pyc文件;

每次使用pyc文件時,都會根據pyc文件的創建時間和源模塊進行對比,如果源模塊有修改,則重新創建pyc文件,并覆蓋先前的pyc文件,如果沒有修改,直接使用pyc文件代替模塊;

Pyc文件統一保存在模塊所在目錄的pycache文件夾內。

如下圖所示,module_a被module_main導入后會生成對應的pyc文件,但是modul_main不會生成pyc文件!

image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容