python历史以及基础知识
生活随笔
收集整理的這篇文章主要介紹了
python历史以及基础知识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. Python 基礎知識
1.1 Python 歷史
1.1.1 Python 起源
Python 的作者,Guido von Rossum,荷蘭人。1982 年,Guido 從阿姆斯特丹大學
獲得了數學和計算機碩士學位。然而,盡管他算得上是一位數學家,但他更加享受計算機帶
來的樂趣。用他的話說,盡管擁有數學和計算機雙料資質,他總趨向于做計算機相關的工作,
并熱衷于做任何和編程相關的活兒。
在那個時候,Guido 接觸并使用過諸如 Pascal、C、Fortran 等語言。這些語言的基本
設計原則是讓機器能更快運行。在 80 年代,雖然 IBM 和蘋果已經掀起了個人電腦浪潮,
但這些個人電腦的配置很低。比如早期的 Macintosh,只有 8MHz 的 CPU 主頻和 128KB
的 RAM,一個大的數組就能占滿內存。所有的編譯器的核心是做優化,以便讓程序能夠運
行。為了增進效率,語言也迫使程序員像計算機一樣思考,以便能寫出更符合機器口味的程
序。在那個時代,程序員恨不得用手榨取計算機每一寸的能力。有人甚至認為 C 語言的指
針是在浪費內存。至于動態類型,內存自動管理,面向對象…… 別想了,那會讓你的電腦
陷入癱瘓。
這種編程方式讓 Guido 感到苦惱。Guido 知道如何用 C 語言寫出一個功能,但整個編
寫過程需要耗費大量的時間,即使他已經準確的知道了如何實現。他的另一個選擇是 shell。
Bourne Shell 作為 UNIX 系統的解釋器已經長期存在。UNIX 的管理員們常常用 shell 去寫
一些簡單的腳本,以進行一些系統維護的工作,比如定期備份、文件系統管理等等。shell
可以像膠水一樣,將 UNIX 下的許多功能連接在一起。許多 C 語言下上百行的程序,在 shell
下只用幾行就可以完成。然而,shell 的本質是調用命令。它并不是一個真正的語言。比如
說,shell 沒有數值型的數據類型,加法運算都很復雜。總之,shell 不能全面的調動計算機
的功能。
Guido 希望有一種語言,這種語言能夠像 C 語言那樣,能夠全面調用計算機的功能接
口,又可以像 shell 那樣,可以輕松的編程。ABC 語言讓 Guido 看到希望。ABC 是由荷蘭
的數學和計算機研究所開發的。Guido 在該研究所工作,并參與到 ABC 語言的開發。ABC
語言以教學為目的。與當時的大部分語言不同,ABC 語言的目標是“讓用戶感覺更好”。ABC
語言希望讓語言變得容易閱讀,容易使用,容易記憶,容易學習,并以此來激發人們學習編
程的興趣。比如下面是一段來自 Wikipedia 的 ABC 程序,這個程序用于統計文本中出現的
詞的總數:
HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection HOW TO 用于定義一個函數。
一個 Python 程序員應該很容易理解這段程序。ABC 語
言使用冒號和縮進來表示程序塊。行 尾沒有分號。for 和 if 結構中也沒有括號() 。賦值采
用的是 PUT,而不是更常見的等號。這些改動讓 ABC 程序讀起來像一段文字。 盡管已經
具備了良好的可讀性和易用性,ABC 語言最終沒有流行起來。在當時,ABC 語言編譯器需
要比較高配置的電腦才能運行。而這些電腦的使用者通常精通計算機,他們更多考慮程序的
效率,而非它的學習難度。除了硬件上的困難外,ABC 語言的設計也存在一些致命的問題:
可拓展性差。ABC 語言不是模塊化語言。
如果想在 ABC 語言中增加功能,比如對圖形化的
支持,就必須改動很多地方。不能直接進行 IO。ABC 語言不能直接操作文件系統。盡管你
可以通過諸如文本流的方式導入數據,但 ABC 無法直接讀寫文 件。輸入輸出的困難對于計
算機語言來說是致命的。你能想像一個打不開車門的跑車么? 過度革新。ABC 用自然語言
的方式來表達程序的意義,比如上面程序中的 HOW TO 。然而對于程序員來說,他們更習
慣 用 function 或者 define 來定義一個函數。同樣,程序員更習慣用等號來分配變量。盡
管 ABC 語言很特別,但學習難度 也很大。 傳播困難。ABC 編譯器很大,必須被保存在磁
帶上。當時 Guido 在訪問的時候,就必須有一個大磁帶來給別人安裝 ABC 編 譯器。 這樣,
ABC 語言就很難快速傳播。?
1989 年,為了打發圣誕節假期,Guido 開始寫 Python 語言
的編譯器。Python 這個名字,來自 Guido 所摯愛的電視劇 Monty Python's Flying Circus。
他希望這個新的叫做 Python 的語言,能符合他的理想:創造一種 C 和 shell 之間,功能全
面,易學易用,可拓展的語言。Guido 作為一個語言設計愛好者,已經有過設計語言的嘗
試。
1.2 Python 誕生
1991 年,第一個 Python 編譯器誕生。它是用 C 語言實現的,并能夠調用 C 語言的庫
文件。從一出生,Python 已經具有了 :類,函數,異常處理,包含表和詞典在內的核心
數據類型,以及模塊為基礎的拓展系統。 Python 語法很多來自 C,但又受到 ABC 語言的
強烈影響。來自 ABC 語言的一些規定直到今天還富有爭議,比如強制縮進。 但這些語法規
定讓 Python 容易讀。另一方面,Python 聰明的選擇服從一些慣例,特別是 C 語言的慣例,
比如回歸等號賦值。Guido 認為,如果“常識”上確立的東西,沒有必要過度糾結。 Python
從一開始就特別在意可拓展性。Python 可以在多個層次上拓展。從高層上,你可以直接引
入. py 文件。在底層,你可以引用 C 語言的庫。Python 程序員可以快速的使用 Python 寫. py 文件作為拓展模塊。但當性能是考慮的重要因素時,Python 程序員可以深入底層,寫 C
程序,編譯為.so 文件引入到 Python 中使用。Python 就好像是使用鋼構建房一樣,先規
定好大的框架。而程序員可以在此框架下相當自由的拓展或更改。 最初的 Python 完全由
Guido 本人開發。Python 得到 Guido 同事的歡迎。他們迅速的反饋使用意見,并參與到
Python 的改進。Guido 和一些同事構成 Python 的核心團隊。他們將自己大部分的業余時
間用于 hack Python。隨后,Python 拓展到研究所之外。Python 將許多機器層面上的細
節隱藏,交給編譯器處理,并凸顯出邏輯層面的編程思考。Python 程序員可以花更多的時
間用于思考程序的邏輯,而不是具體的實現細節。這一特征吸引了廣大的程序員。Python
開始流行。
1.1.3 時勢造英雄
我們不得不暫停我們的 Python 時間,轉而看一看瞬息萬變的計算機行業。1990 年代
初,個人計算機開始進入普通家庭。Intel 發布了 486 處理器,windows 發布 window 3.0
開始的一系列視窗系統。計算機的性能大大提高。程序員開始關注計算機的易用性,比如圖
形化界面。
(Windows 3.0)
由于計算機性能的提高,軟件的世界也開始隨之改變。硬件足以滿足許多個人電腦的需
要。硬件廠商甚至渴望高需求軟件的出現,以帶動硬件的更新換代。C++和 Java 相繼流行。
C++和 Java 提供了面向對象的編程范式,以及豐富的對象庫。在犧牲了一定的性能的代價
下,C++和 Java 大大提高了程序的產量。語言的易用性被提到一個新的高度。我們還記得 ,
ABC 失敗的一個重要原因是硬件的性能限制。從這方面說,Python 要比 ABC 幸運許多。
硬件性能不是瓶頸,Python 又容易使用,所以許多人開始轉向 Python。Guido 維護了一
個 maillist,Python 用戶就通過郵件進行交流。Python 用戶來自許多領域,有不同的背景,
對 Python 也有不同的需求。
Python 相當的開放,又容 易拓展,所以當用戶不滿足于現有
功能,很容易對 Python 進行拓展或改造。隨后,這些用戶將改動發給 Guido,并由 Gu ido
決定是否將新的特征加入到 Python 或者標準庫中。如果代碼能被納入 Python 自身或者標
準庫,這將極大的榮譽。
由于 Guido 至高無上的決定權,他因此被稱為“終身的仁慈獨裁
者”。 Python 被稱為“Battery Included”,是說它以及其標準庫的功能強大。這些是整個
社區的貢獻。Python 的開發者來自不同領域,他們將不同領域的優點帶給 Python。比如
Python 標準庫中的正則表達是參考 Perl,而 lambda, map, filter, reduce 等函數參考了
Lisp。Python 本身的一些功能以及大部分的標準庫來自于社區。Python 的社 區不斷擴大,
進而擁有了自己的 newsgroup,網站,以及基金。從 Python 2.0 開始,Python 也從 maillist
的開發方式,轉為完全開源的開發方式。社區氣氛已經形成,工作被整個社區分擔,Python
也獲得了更加高速的發展。 到今天,Python 的框架已經確立。Python 語言以對象為核心
組織代碼,支持多種編程范式,采用動態類型,自動進行內存回收。Python 支持解釋運行,
并能調用 C庫進行拓展。Python有強大的標準庫。由于標準庫的體系已經穩定,所以Python
的生態系統開始拓展到第三方包。這些包,如 Django、web.py、wxpython、numpy、
matplotlib、PIL,將 Python 升級成了物種豐富的熱帶雨林。
1.4 啟示錄
Python 崇尚優美、清晰、簡單,是一個優秀并廣泛使用的語言。Python 在 TIOBE 排
行榜中排行第八,它是 Google 的第三大開發語言,Dropbox 的基礎語言,豆瓣的服務器
語言。Python 的發展史可以作為一個代表,帶給我許多啟示。 在 Python 的開發過程中,
社區起到了重要的作用。Guido 自認為自己不是全能型的程序員,所以他只負責制訂框架。
如果問題太復雜,他會選擇繞過去,也就是 cut the corner。這些問題最終由社區中的其他
人解決。社區中的人才是異常豐富的,就連創建網站,籌集基金這樣與開發稍遠的事情,也
有人樂意于處理。如今的項目開發越來越復雜,越來越龐大,合作以及開放的心態成為項目
最終成功的關鍵。 Python 從其他語言中學到了很多,無論是已經進入歷史的 ABC,還是
依然在使用的 C 和 Perl,以及許多沒有列出的其他 語言。可以說,Python 的成功代表了
它所有借鑒的語言的成功。同樣,Ruby 借鑒了 Python,它的成功也代表了 Python 某些
方面的成功。每個語言都是混合體,都有它優秀的地方,但也有各種各樣的缺陷。同時,一
個語言“好與不好”的評 判,往往受制于平臺、硬件、時代等等外部原因。程序員經歷過
許多語言之爭。其實,以開放的心態來接受各個語言,說不定哪一天,程序員也可以如 Guido
那樣,混合出自己的語言。
1.5 Python 優缺點
優點:
??
簡單————Python 是一種代表簡單主義思想的語言。閱讀一個良好的 Python 程序
就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴格!Python 的這種偽代碼本質
是它最大的優點之一。它使你能夠專注于解決問題而不是去搞明白語言本身。
??
易學————就如同你即將看到的一樣,Python 極其容易上手。前面已經提到了,
Python 有極其簡單的語法。
??
免費、開源————Python 是 FLOSS(自由/開放源碼軟件)之一。簡單地說,你可
以自由地發布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的
自由軟件中。FLOSS 是基于一個團體分享知識的概念。這是為什么 Python 如此優秀
的原因之一——它是由一群希望看到一個更加優秀的 Python 的人創造并經常改進著
的。
??
高層語言————當你用 Python 語言編寫程序的時候,你無需考慮諸如如何管理你
的程序使用的內存一類的底層細節。
??
可移植性————由于它的開源本質,Python 已經被移植在許多平臺上(經過改動使
它能夠工作在不同平臺上)。如果你小心地避免使用依賴于系統的特性,那么你的所有
Python 程序無需修改就可以在下述任何平臺上面運行。這些平臺包括 Linux、 Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、
OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、
PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google
基于 linux 開發的 Android 平臺!
??
解釋性————這一點需要一些解釋。一個用編譯性語言比如 C 或 C++寫的程序可以
從源文件(即 C 或 C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即 0
和 1)。這個過程通過編譯器和不同的標記、選項完成。當你運行你的程序的時候,連
接/轉載器軟件把你的程序從硬盤復制到內存中并且運行。而 Python 語言寫的程序不
需要編譯成二進制代碼。你可以直接從源代碼運行程序。在計算機內部,Python 解釋
器把源代碼轉換成稱為字節碼的中間形式,然后再把它翻譯成計算機使用的機器語言并
運行。事實上,由于你不再需要擔心如何編譯程序,如何確保連接轉載正確的庫等等,
所有這一切使得使用 Python 更加簡單。由于你只需要把你的 Python 程序拷貝到另外
一臺計算機上,它就可以工作了,這也使得你的 Python 程序更加易于移植。
??
面向對象————Python 既支持面向過程的編程也支持面向對象的編程。在“面向過
程”的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”
的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如 C++
和 Java 相比,Python 以一種非常強大又簡單的方式實現面向對象編程。
??
可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公
開,你可以把你的部分程序用 C 或 C++編寫,然后在你的 Python 程序中使用它們。
??
豐富的庫————Python 標準庫確實很龐大。它可以幫助你處理各種工作,包括正則
表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、
XML、XML-RPC、HTML、WAV 文件、密碼系統、GUI(圖形用戶界面)和其他與系
統有關的操作。記住,只要安裝了 Python,所有這些功能都是可用的。這被稱作 Python
的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如 wxPython、Twisted
和 Python 圖像庫等等。
??
規范的代碼————Python 采用強制縮進的方式使得代碼具有極佳的可讀性。
缺點:
? 運行速度,有速度要求的話,用 C++改寫關鍵部分吧。
? 國內市場較小。
? 中文資料匱乏。
1.6 Python 應用場景
? Web 應用開發。Python 經常被用于 Web 開發。比如,通過 mod_wsgi 模塊,Apache
可以運行用 Python編寫的 Web程序。Python 定義了 WSGI標準應用接口來協調Http
服 務 器 與 基 于 Python 的 Web 程 序 之 間 的 通 信 。 一 些 Web 框 架 , 如
Django,TurboGears,web2py,Zope 等,可以讓程序員輕松地開發和管理復雜的 Web
程序。
?
?操作系統管理、服務器運維的自動化腳本。在很多操作系統里,Python 是標準的系統
組件。大多數 Linux 發行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,
可以在終端下直接運行 Python。Python 標準庫包含了多個調用操作系統功能的庫。
通過 pywin32 這個第三方軟件包,Python 能夠訪問 Windows 的 COM 服務及其它
Windows API。使用 IronPython,Python 程序能夠直接調用.Net Framework。一
般說來,Python 編寫的系統管理腳本在可讀性、性能、代碼重用度、擴展性幾方面都
優于普通的 shell 腳本。
??
科學計算。NumPy,SciPy,Matplotlib 可以讓 Python 程序員編寫科學計算程序。
??
桌面軟件。PyQt、PySide、wxPython、PyGTK 是 Python 快速開發桌面應用程序的
利器。
?
?服務器軟件(網絡軟件).Python 對于各種網絡協議的支持很完善,因此經常被用于編
寫服務器軟件、網絡爬蟲。
??
游戲。很多游戲使用 C++編寫圖形顯示等高性能模塊,而使用 Python 或者 Lua 編寫
游戲的邏輯、服務器。相較于 Python,Lua 的功能更簡單、體積更小;而 Python 則
支持更多的特性和數據類型。
? 構思實現,產品早期原型和迭代。YouTube、Google、Yahoo!、NASA 都在內部大量
地使用 Python。
1.7 Py2.x 與 3.x 版本簡介
目前市場上有兩個 Python 的版本并存著,分別是 Python 2.x 和 Python 3.x:
# 使用 python 2.x 解釋器
$ python xxx.py
# 使用 python 3.x 解釋器
$ python3 xxx.py
新的 Python 程序建議使用 Python 3.0 版本的語法
Python 2.x 是 過去的版本,解釋器名稱是 python. Python 3.x 是 現在和未來 主流的版本,解釋器名稱是 python3. 相對于 Python 的早期版本,這是一個 較大的升級.為了不帶入過多的累贅,Python
3.0 在設計的時候 沒有考慮向下兼容.許多早期 Python 版本設計的程序都無法在
Python 3.0 上正常執行. Python 3.0 發布于 2008 年,到目前為止,Python 3.0 的穩定版本已經有很多年了:
Python 3.3 發布于 2012
Python 3.4 發布于 2014
Python 3.5 發布于 2015
Python 3.6 發布于 2016
為了照顧現有的程序,官方提供了一個過渡版本 —— Python 2.6,基本使用了
Python 2.x 的語法和庫,同時考慮了向 Python 3.0 的遷移,允許使用部分 Python 3.0 的
語法與函數.
2010 年中推出的 Python 2.7 被確定為 最后一個 Python 2.x 版本. 提示:如果開發時,無法立即使用 Python 3.0(還有極少的第三方庫不支持 3.0 的語法),
建議:
先使用 Python 3.0 版本進行開發. 然后使用 Python 2.6、Python 2.7 來執行,并且做一些兼容性的處理.?
1.8 Python 的解釋器
Python 的解釋器 如今有多個語言的實現,包括:
CPython —— 官方版本的 C 語言實現
Jython —— 可以運行在 Java 平臺
IronPython —— 可以運行在 .NET 和 Mono 平臺
PyPy —— Python 實現的,支持 JIT 即時編譯
1.1 Python 歷史
1.1.1 Python 起源
Python 的作者,Guido von Rossum,荷蘭人。1982 年,Guido 從阿姆斯特丹大學
獲得了數學和計算機碩士學位。然而,盡管他算得上是一位數學家,但他更加享受計算機帶
來的樂趣。用他的話說,盡管擁有數學和計算機雙料資質,他總趨向于做計算機相關的工作,
并熱衷于做任何和編程相關的活兒。
在那個時候,Guido 接觸并使用過諸如 Pascal、C、Fortran 等語言。這些語言的基本
設計原則是讓機器能更快運行。在 80 年代,雖然 IBM 和蘋果已經掀起了個人電腦浪潮,
但這些個人電腦的配置很低。比如早期的 Macintosh,只有 8MHz 的 CPU 主頻和 128KB
的 RAM,一個大的數組就能占滿內存。所有的編譯器的核心是做優化,以便讓程序能夠運
行。為了增進效率,語言也迫使程序員像計算機一樣思考,以便能寫出更符合機器口味的程
序。在那個時代,程序員恨不得用手榨取計算機每一寸的能力。有人甚至認為 C 語言的指
針是在浪費內存。至于動態類型,內存自動管理,面向對象…… 別想了,那會讓你的電腦
陷入癱瘓。
這種編程方式讓 Guido 感到苦惱。Guido 知道如何用 C 語言寫出一個功能,但整個編
寫過程需要耗費大量的時間,即使他已經準確的知道了如何實現。他的另一個選擇是 shell。
Bourne Shell 作為 UNIX 系統的解釋器已經長期存在。UNIX 的管理員們常常用 shell 去寫
一些簡單的腳本,以進行一些系統維護的工作,比如定期備份、文件系統管理等等。shell
可以像膠水一樣,將 UNIX 下的許多功能連接在一起。許多 C 語言下上百行的程序,在 shell
下只用幾行就可以完成。然而,shell 的本質是調用命令。它并不是一個真正的語言。比如
說,shell 沒有數值型的數據類型,加法運算都很復雜。總之,shell 不能全面的調動計算機
的功能。
Guido 希望有一種語言,這種語言能夠像 C 語言那樣,能夠全面調用計算機的功能接
口,又可以像 shell 那樣,可以輕松的編程。ABC 語言讓 Guido 看到希望。ABC 是由荷蘭
的數學和計算機研究所開發的。Guido 在該研究所工作,并參與到 ABC 語言的開發。ABC
語言以教學為目的。與當時的大部分語言不同,ABC 語言的目標是“讓用戶感覺更好”。ABC
語言希望讓語言變得容易閱讀,容易使用,容易記憶,容易學習,并以此來激發人們學習編
程的興趣。比如下面是一段來自 Wikipedia 的 ABC 程序,這個程序用于統計文本中出現的
詞的總數:
HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection HOW TO 用于定義一個函數。
一個 Python 程序員應該很容易理解這段程序。ABC 語
言使用冒號和縮進來表示程序塊。行 尾沒有分號。for 和 if 結構中也沒有括號() 。賦值采
用的是 PUT,而不是更常見的等號。這些改動讓 ABC 程序讀起來像一段文字。 盡管已經
具備了良好的可讀性和易用性,ABC 語言最終沒有流行起來。在當時,ABC 語言編譯器需
要比較高配置的電腦才能運行。而這些電腦的使用者通常精通計算機,他們更多考慮程序的
效率,而非它的學習難度。除了硬件上的困難外,ABC 語言的設計也存在一些致命的問題:
可拓展性差。ABC 語言不是模塊化語言。
如果想在 ABC 語言中增加功能,比如對圖形化的
支持,就必須改動很多地方。不能直接進行 IO。ABC 語言不能直接操作文件系統。盡管你
可以通過諸如文本流的方式導入數據,但 ABC 無法直接讀寫文 件。輸入輸出的困難對于計
算機語言來說是致命的。你能想像一個打不開車門的跑車么? 過度革新。ABC 用自然語言
的方式來表達程序的意義,比如上面程序中的 HOW TO 。然而對于程序員來說,他們更習
慣 用 function 或者 define 來定義一個函數。同樣,程序員更習慣用等號來分配變量。盡
管 ABC 語言很特別,但學習難度 也很大。 傳播困難。ABC 編譯器很大,必須被保存在磁
帶上。當時 Guido 在訪問的時候,就必須有一個大磁帶來給別人安裝 ABC 編 譯器。 這樣,
ABC 語言就很難快速傳播。?
1989 年,為了打發圣誕節假期,Guido 開始寫 Python 語言
的編譯器。Python 這個名字,來自 Guido 所摯愛的電視劇 Monty Python's Flying Circus。
他希望這個新的叫做 Python 的語言,能符合他的理想:創造一種 C 和 shell 之間,功能全
面,易學易用,可拓展的語言。Guido 作為一個語言設計愛好者,已經有過設計語言的嘗
試。
1.2 Python 誕生
1991 年,第一個 Python 編譯器誕生。它是用 C 語言實現的,并能夠調用 C 語言的庫
文件。從一出生,Python 已經具有了 :類,函數,異常處理,包含表和詞典在內的核心
數據類型,以及模塊為基礎的拓展系統。 Python 語法很多來自 C,但又受到 ABC 語言的
強烈影響。來自 ABC 語言的一些規定直到今天還富有爭議,比如強制縮進。 但這些語法規
定讓 Python 容易讀。另一方面,Python 聰明的選擇服從一些慣例,特別是 C 語言的慣例,
比如回歸等號賦值。Guido 認為,如果“常識”上確立的東西,沒有必要過度糾結。 Python
從一開始就特別在意可拓展性。Python 可以在多個層次上拓展。從高層上,你可以直接引
入. py 文件。在底層,你可以引用 C 語言的庫。Python 程序員可以快速的使用 Python 寫. py 文件作為拓展模塊。但當性能是考慮的重要因素時,Python 程序員可以深入底層,寫 C
程序,編譯為.so 文件引入到 Python 中使用。Python 就好像是使用鋼構建房一樣,先規
定好大的框架。而程序員可以在此框架下相當自由的拓展或更改。 最初的 Python 完全由
Guido 本人開發。Python 得到 Guido 同事的歡迎。他們迅速的反饋使用意見,并參與到
Python 的改進。Guido 和一些同事構成 Python 的核心團隊。他們將自己大部分的業余時
間用于 hack Python。隨后,Python 拓展到研究所之外。Python 將許多機器層面上的細
節隱藏,交給編譯器處理,并凸顯出邏輯層面的編程思考。Python 程序員可以花更多的時
間用于思考程序的邏輯,而不是具體的實現細節。這一特征吸引了廣大的程序員。Python
開始流行。
1.1.3 時勢造英雄
我們不得不暫停我們的 Python 時間,轉而看一看瞬息萬變的計算機行業。1990 年代
初,個人計算機開始進入普通家庭。Intel 發布了 486 處理器,windows 發布 window 3.0
開始的一系列視窗系統。計算機的性能大大提高。程序員開始關注計算機的易用性,比如圖
形化界面。
(Windows 3.0)
由于計算機性能的提高,軟件的世界也開始隨之改變。硬件足以滿足許多個人電腦的需
要。硬件廠商甚至渴望高需求軟件的出現,以帶動硬件的更新換代。C++和 Java 相繼流行。
C++和 Java 提供了面向對象的編程范式,以及豐富的對象庫。在犧牲了一定的性能的代價
下,C++和 Java 大大提高了程序的產量。語言的易用性被提到一個新的高度。我們還記得 ,
ABC 失敗的一個重要原因是硬件的性能限制。從這方面說,Python 要比 ABC 幸運許多。
硬件性能不是瓶頸,Python 又容易使用,所以許多人開始轉向 Python。Guido 維護了一
個 maillist,Python 用戶就通過郵件進行交流。Python 用戶來自許多領域,有不同的背景,
對 Python 也有不同的需求。
Python 相當的開放,又容 易拓展,所以當用戶不滿足于現有
功能,很容易對 Python 進行拓展或改造。隨后,這些用戶將改動發給 Guido,并由 Gu ido
決定是否將新的特征加入到 Python 或者標準庫中。如果代碼能被納入 Python 自身或者標
準庫,這將極大的榮譽。
由于 Guido 至高無上的決定權,他因此被稱為“終身的仁慈獨裁
者”。 Python 被稱為“Battery Included”,是說它以及其標準庫的功能強大。這些是整個
社區的貢獻。Python 的開發者來自不同領域,他們將不同領域的優點帶給 Python。比如
Python 標準庫中的正則表達是參考 Perl,而 lambda, map, filter, reduce 等函數參考了
Lisp。Python 本身的一些功能以及大部分的標準庫來自于社區。Python 的社 區不斷擴大,
進而擁有了自己的 newsgroup,網站,以及基金。從 Python 2.0 開始,Python 也從 maillist
的開發方式,轉為完全開源的開發方式。社區氣氛已經形成,工作被整個社區分擔,Python
也獲得了更加高速的發展。 到今天,Python 的框架已經確立。Python 語言以對象為核心
組織代碼,支持多種編程范式,采用動態類型,自動進行內存回收。Python 支持解釋運行,
并能調用 C庫進行拓展。Python有強大的標準庫。由于標準庫的體系已經穩定,所以Python
的生態系統開始拓展到第三方包。這些包,如 Django、web.py、wxpython、numpy、
matplotlib、PIL,將 Python 升級成了物種豐富的熱帶雨林。
1.4 啟示錄
Python 崇尚優美、清晰、簡單,是一個優秀并廣泛使用的語言。Python 在 TIOBE 排
行榜中排行第八,它是 Google 的第三大開發語言,Dropbox 的基礎語言,豆瓣的服務器
語言。Python 的發展史可以作為一個代表,帶給我許多啟示。 在 Python 的開發過程中,
社區起到了重要的作用。Guido 自認為自己不是全能型的程序員,所以他只負責制訂框架。
如果問題太復雜,他會選擇繞過去,也就是 cut the corner。這些問題最終由社區中的其他
人解決。社區中的人才是異常豐富的,就連創建網站,籌集基金這樣與開發稍遠的事情,也
有人樂意于處理。如今的項目開發越來越復雜,越來越龐大,合作以及開放的心態成為項目
最終成功的關鍵。 Python 從其他語言中學到了很多,無論是已經進入歷史的 ABC,還是
依然在使用的 C 和 Perl,以及許多沒有列出的其他 語言。可以說,Python 的成功代表了
它所有借鑒的語言的成功。同樣,Ruby 借鑒了 Python,它的成功也代表了 Python 某些
方面的成功。每個語言都是混合體,都有它優秀的地方,但也有各種各樣的缺陷。同時,一
個語言“好與不好”的評 判,往往受制于平臺、硬件、時代等等外部原因。程序員經歷過
許多語言之爭。其實,以開放的心態來接受各個語言,說不定哪一天,程序員也可以如 Guido
那樣,混合出自己的語言。
1.5 Python 優缺點
優點:
??
簡單————Python 是一種代表簡單主義思想的語言。閱讀一個良好的 Python 程序
就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴格!Python 的這種偽代碼本質
是它最大的優點之一。它使你能夠專注于解決問題而不是去搞明白語言本身。
??
易學————就如同你即將看到的一樣,Python 極其容易上手。前面已經提到了,
Python 有極其簡單的語法。
??
免費、開源————Python 是 FLOSS(自由/開放源碼軟件)之一。簡單地說,你可
以自由地發布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的
自由軟件中。FLOSS 是基于一個團體分享知識的概念。這是為什么 Python 如此優秀
的原因之一——它是由一群希望看到一個更加優秀的 Python 的人創造并經常改進著
的。
??
高層語言————當你用 Python 語言編寫程序的時候,你無需考慮諸如如何管理你
的程序使用的內存一類的底層細節。
??
可移植性————由于它的開源本質,Python 已經被移植在許多平臺上(經過改動使
它能夠工作在不同平臺上)。如果你小心地避免使用依賴于系統的特性,那么你的所有
Python 程序無需修改就可以在下述任何平臺上面運行。這些平臺包括 Linux、 Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、
OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、
PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google
基于 linux 開發的 Android 平臺!
??
解釋性————這一點需要一些解釋。一個用編譯性語言比如 C 或 C++寫的程序可以
從源文件(即 C 或 C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即 0
和 1)。這個過程通過編譯器和不同的標記、選項完成。當你運行你的程序的時候,連
接/轉載器軟件把你的程序從硬盤復制到內存中并且運行。而 Python 語言寫的程序不
需要編譯成二進制代碼。你可以直接從源代碼運行程序。在計算機內部,Python 解釋
器把源代碼轉換成稱為字節碼的中間形式,然后再把它翻譯成計算機使用的機器語言并
運行。事實上,由于你不再需要擔心如何編譯程序,如何確保連接轉載正確的庫等等,
所有這一切使得使用 Python 更加簡單。由于你只需要把你的 Python 程序拷貝到另外
一臺計算機上,它就可以工作了,這也使得你的 Python 程序更加易于移植。
??
面向對象————Python 既支持面向過程的編程也支持面向對象的編程。在“面向過
程”的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”
的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如 C++
和 Java 相比,Python 以一種非常強大又簡單的方式實現面向對象編程。
??
可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公
開,你可以把你的部分程序用 C 或 C++編寫,然后在你的 Python 程序中使用它們。
??
豐富的庫————Python 標準庫確實很龐大。它可以幫助你處理各種工作,包括正則
表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、
XML、XML-RPC、HTML、WAV 文件、密碼系統、GUI(圖形用戶界面)和其他與系
統有關的操作。記住,只要安裝了 Python,所有這些功能都是可用的。這被稱作 Python
的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如 wxPython、Twisted
和 Python 圖像庫等等。
??
規范的代碼————Python 采用強制縮進的方式使得代碼具有極佳的可讀性。
缺點:
? 運行速度,有速度要求的話,用 C++改寫關鍵部分吧。
? 國內市場較小。
? 中文資料匱乏。
1.6 Python 應用場景
? Web 應用開發。Python 經常被用于 Web 開發。比如,通過 mod_wsgi 模塊,Apache
可以運行用 Python編寫的 Web程序。Python 定義了 WSGI標準應用接口來協調Http
服 務 器 與 基 于 Python 的 Web 程 序 之 間 的 通 信 。 一 些 Web 框 架 , 如
Django,TurboGears,web2py,Zope 等,可以讓程序員輕松地開發和管理復雜的 Web
程序。
?
?操作系統管理、服務器運維的自動化腳本。在很多操作系統里,Python 是標準的系統
組件。大多數 Linux 發行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,
可以在終端下直接運行 Python。Python 標準庫包含了多個調用操作系統功能的庫。
通過 pywin32 這個第三方軟件包,Python 能夠訪問 Windows 的 COM 服務及其它
Windows API。使用 IronPython,Python 程序能夠直接調用.Net Framework。一
般說來,Python 編寫的系統管理腳本在可讀性、性能、代碼重用度、擴展性幾方面都
優于普通的 shell 腳本。
??
科學計算。NumPy,SciPy,Matplotlib 可以讓 Python 程序員編寫科學計算程序。
??
桌面軟件。PyQt、PySide、wxPython、PyGTK 是 Python 快速開發桌面應用程序的
利器。
?
?服務器軟件(網絡軟件).Python 對于各種網絡協議的支持很完善,因此經常被用于編
寫服務器軟件、網絡爬蟲。
??
游戲。很多游戲使用 C++編寫圖形顯示等高性能模塊,而使用 Python 或者 Lua 編寫
游戲的邏輯、服務器。相較于 Python,Lua 的功能更簡單、體積更小;而 Python 則
支持更多的特性和數據類型。
? 構思實現,產品早期原型和迭代。YouTube、Google、Yahoo!、NASA 都在內部大量
地使用 Python。
1.7 Py2.x 與 3.x 版本簡介
目前市場上有兩個 Python 的版本并存著,分別是 Python 2.x 和 Python 3.x:
# 使用 python 2.x 解釋器
$ python xxx.py
# 使用 python 3.x 解釋器
$ python3 xxx.py
新的 Python 程序建議使用 Python 3.0 版本的語法
Python 2.x 是 過去的版本,解釋器名稱是 python. Python 3.x 是 現在和未來 主流的版本,解釋器名稱是 python3. 相對于 Python 的早期版本,這是一個 較大的升級.為了不帶入過多的累贅,Python
3.0 在設計的時候 沒有考慮向下兼容.許多早期 Python 版本設計的程序都無法在
Python 3.0 上正常執行. Python 3.0 發布于 2008 年,到目前為止,Python 3.0 的穩定版本已經有很多年了:
Python 3.3 發布于 2012
Python 3.4 發布于 2014
Python 3.5 發布于 2015
Python 3.6 發布于 2016
為了照顧現有的程序,官方提供了一個過渡版本 —— Python 2.6,基本使用了
Python 2.x 的語法和庫,同時考慮了向 Python 3.0 的遷移,允許使用部分 Python 3.0 的
語法與函數.
2010 年中推出的 Python 2.7 被確定為 最后一個 Python 2.x 版本. 提示:如果開發時,無法立即使用 Python 3.0(還有極少的第三方庫不支持 3.0 的語法),
建議:
先使用 Python 3.0 版本進行開發. 然后使用 Python 2.6、Python 2.7 來執行,并且做一些兼容性的處理.?
1.8 Python 的解釋器
Python 的解釋器 如今有多個語言的實現,包括:
CPython —— 官方版本的 C 語言實現
Jython —— 可以運行在 Java 平臺
IronPython —— 可以運行在 .NET 和 Mono 平臺
PyPy —— Python 實現的,支持 JIT 即時編譯
總結
以上是生活随笔為你收集整理的python历史以及基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux nginx 图片服务器,搭建
- 下一篇: Telegraf安装及使用