python筆記-簡介
一Python的簡介
一歷史簡介
Python誕生於1991年,目前有27年了,比1995年的JAVA語言都早了4年,為何大器晚成?
其一,在1990那個年代,計算機效能相比現在差很多,程式執行速度和效率很重要,快速開發不是第一要務,壓榨機器效能才是。Python作為一門解釋型動態語言,在解釋方式上它天生就存在執行速度較慢的問題,因此不被當時程式設計界看好,其追求開發速度、強調簡潔優雅、降低程式設計門檻的核心理念有點超越當時主流。而時至今日,計算機的硬體效能已經得到數量級的提高,計算能力不再是限制程式語言的最重要的因素,敏捷開發成為生產環境下對語言選擇的重要因素,Python很好的滿足了這一點,從而得到快速發展。
其二,作為對比的JAVA出身名門,其東家為SUN,當時網際網路的頭號公司,類似現在Google的地位,因而得到大力推廣,並且有一群能力強、專職、有組織的團隊進行開發和維護,所以很快獲得成功,普及開來,至今仍然霸佔著程式語言的榜首位置。而Python是個人編寫的,寒門出身,龜叔沒有三頭六臂,個人時間精力都是有限的,雖然有一些志願者幫忙做一些事情,但無疑和JAVA的正規軍相比,能量還是要差了很多,這些都導致Python在初期發展得較為緩慢,甚至到如今都還未解決其被詬病的GIL問題。
二、Python語言的特點
1. 簡單易學、明確優雅、開發速度快
簡單易學:與C和Java比,Python的學習成本和難度曲線不是低一點,更適合新手入門,自底向上的技術攀爬路線。先訂個小目標爬個小山,然後再往更高的山峰前進。
明確優雅:Python的語法非常簡潔,程式碼量少,非常容易編寫,程式碼的測試、重構、維護等都非常容易。一個小小的指令碼,用C可能需要1000行,用JAVA可能幾百行,但是用Python往往只需要幾十行!
開發速度快:當前網際網路企業的生命線是什麼?產品開發速度!如果你的開發速度不夠快,在你的產品推出之前別人家的產品已經上線了,你也就沒有生存空間了,這裡的真例項子數不勝數。那麼,Python的開發速度說第二沒人敢稱第一!
2. 跨平臺、可移植、可擴充套件、互動式、解釋型、面向物件的動態語言
跨平臺:Python支援Windows、Linux和MAC os等主流作業系統。
可移植:程式碼通常不需要多少改動就能移植到別的平臺上使用。
可擴充套件:Python語言本身由C語言編寫而成的,你完全可以在Python中嵌入C,從而提高程式碼的執行速度和效率。你也可以使用C語言重寫Python的任何模組,從根本上改寫Python,PyPy就是這麼幹的。
互動式:Python提供很好的人機互動介面,比如IDLE和IPython。可以從終端輸入執行程式碼並獲得結果,互動的測試和除錯程式碼片斷。
解釋型:Python語言在執行過程中由直譯器逐行分析,逐行執行並輸出結果。
面向物件:Python語言具備所有的面向物件特性和功能,支援基於類的程式開發。
動態語言:在執行時可以改變其結構。例如新的函式、物件、甚至程式碼可以被引進,已有的函式可以被刪除或是其他結構上的變化。動態語言非常具有活力。
3. “內建電池”,大量的標準庫和第三方庫
Python為我們提供了非常完善的基礎庫,覆蓋了系統、網路、檔案、GUI、資料庫、文字處理等方方面面,這些是隨同直譯器被預設安裝的,各平臺通用,你無需安裝第三方支援就可以完成大多數工作,這一特點被形象地稱作“內建電池(batteries included)”。
在程式設計師界,有一句話叫做“不要重複造輪子”。什麼意思呢?就是說不要做重複的開發工作,如果對某個問題已經有開源的解決方案或者說第三方庫,就不要自己去開發,直接用別人的就好。不要過分迷信自己的程式碼能力,要知道,能作為標準庫被Python內建,必然在可靠性和演算法效率上達到了目前最高水平,能被廣泛使用的第三方庫,必然也是經受了大量的應用考驗。除非公司要求,不要自己去開發,請使用現成的庫。那些造輪子的事情,就交給世界最頂尖的那一波程式設計師去幹吧,沒有極致的思維和數學能力,想創造好用的輪子是很難的。
4. 社群活躍,貢獻者多,互幫互助
技術社群的存在就相當於程式設計師手中的指南針,沒有指南針,很多時候,碰到了問題,就像無頭的蒼蠅只能到處亂飛,最終在茫茫的海洋中轉暈致死。技術社群可以給我們對語言的學習和使用提供巨大的幫助,無論是前期的學習,還是日後的工作,只要有問題,技術社群的大牛都可以幫我們解決,有這些助力,可以幫我們更好地瞭解、學習和使用一門語言。技術社群同時還推動Python語言的發展方向,功能需求,促使公司企業更多的使用Python語言,招聘Python程式設計師。
然而、然而,上面說的是國外。在國內,好像沒有比較成熟,影響範圍廣的Python技術社群,還是說我見識淺薄不知道而已?據本人分析,有歷史原因和Python流行過程中形成的習慣等因素,國外Python高手都喜歡用郵件列表、wiki等方式進行交流,而國內喜歡的論壇、bbs等沒有形成規模,所以造成現在的狀況。
5. 開源語言,發展動力巨大
Python是基於C語言編寫的,並且使用GPL開源協議,你可以免費獲取它的原始碼,進行學習、研究甚至改進。眾人拾柴火焰高,有更多的人蔘與Python的開發,促使它更好的發展,被更多的應用,形成良性迴圈。Python為什麼會越來越火就是因為它的開放性,自由性,聚起了人氣,形成了社群,有很多人在其中做貢獻,用的人越來越多,自然就提高了市場佔有率,企業、公司、廠家就不得不使用Python,提供的Python程式設計師崗位就越來越多,這就是開源的力量。
這裡附帶跟大家說一個程式碼封閉的問題。Python寫的原始碼通常是不加密的,如果要釋出你的Python程式,實際上就是釋出原始碼,這一點跟C語言不同,C語言不用釋出原始碼,只需要把編譯後的機器碼(也就是你在Windows上常見的xxx.exe檔案)釋出出去。要從機器碼反推出C程式碼基本是不可能的,所以,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把原始碼釋出出去。如果你不想讓別人看到或抄襲你寫的python程式碼怎麼辦?使用類似py2exe的包裝工具,將python原始碼轉換成一個類似於exe可執行檔案的形式,但這個也不是絕對保險,只是增加了反編譯的門檻和難度,對於有經驗的人而言,一樣可以獲得你的原始碼。
靠網站服務和移動應用賣服務的模式越來越多了,這種模式不需要把原始碼給別人。再說了,現在如火如荼的開源運動和網際網路自由開放的精神是一致的,網際網路上有無數非常優秀的像Linux生態圈一樣的開源專案,我們千萬不要高估自己寫的程式碼真的有非常大的“商業價值”。在Python的世界,開源是王道,不要糾結你的程式碼被抄襲模仿,而是儘量提高自己的水平和能力,這才是立身之本。
三 應用的場景
1-常規軟體開發-Python支援函數語言程式設計和OOP面向物件程式設計,能夠承擔任何種類軟體的開發工作,因此常規的軟體開發、指令碼編寫、網路程式設計等都屬於標配能力。
2-科學計算 隨著NumPy, SciPy, Matplotlib, Enthought librarys等眾多程式庫的開發,Python越來越適合於做科學計算、繪製高質量的2D和3D影象。和科學計算領域最流行的商業軟體Matlab相比,Python是一門通用的程式設計語言,比Matlab所採用的指令碼語言的應用範圍更廣泛,有更多的程式庫的支援。雖然Matlab中的許多高階功能和toolbox目前還是無法替代的,不過在日常的科研開發之中仍然有很多的工作是可以用Python代勞的。
3-自動化運維 這幾乎是Python應用的自留地,作為運維工程師首選的程式語言,Python在自動化運維方面已經深入人心,比如Saltstack和Ansible都是大名鼎鼎的自動化平臺
4-雲端計算 開源雲端計算解決方案OpenStack就是基於Python開發的
5-web開發 基於Python的Web開發框架不要太多,比如耳熟能詳的Django,還有Tornado,Flask。其中的Python+Django架構,應用範圍非常廣,開發速度非常快,學習門檻也很低,能夠幫助你快速的搭建起可用的WEB服務。
6-網路爬蟲 也稱網路蜘蛛,是大資料行業獲取資料的核心工具。沒有網路爬蟲自動地、不分晝夜地、高智慧地在網際網路上爬取免費的資料,那些大資料相關的公司恐怕要少四分之三。能夠編寫網路爬蟲的程式語言有不少,但Python絕對是其中的主流之一,其Scripy爬蟲框架應用非常廣泛。
7-資料分析 在大量資料的基礎上,結合科學計算、機器學習等技術,對資料進行清洗、去重、規格化和針對性的分析是大資料行業的基石。Python是資料分析的主流語言之一。
8-人工智慧 Python在人工智慧大範疇領域內的機器學習、神經網路、深度學習等方面都是主流的程式語言,得到廣泛的支援和應用。
四 Python的缺點
第一個缺點就是執行速度相對慢點,和C程式相比慢不少,這是解釋型語言的通病,你的Python程式碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以會變慢。
GIL(Global Interpreter Lock)全域性直譯器鎖,這是一種防止多執行緒併發執行機器碼的互斥鎖,功能和效能之間權衡後的產物。這是在設計Python語言的時候留下的一個歷史性遺留問題,也是限於當時技術團隊實力有限。