人生苦短,我用Python之基礎教程(一)

Python介紹

python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。

最新的TIOBE排行榜,Python趕超C#佔據第五, Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。

人生苦短,我用Python之基礎教程(一)

由上圖可見,Python整體呈上升趨勢,反映出Python應用越來越廣泛並且也逐漸得到業內的認可!!!

Python可以應用於眾多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等眾多領域。目前業內幾乎所有大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。

目前Python主要應用領域:

  • 雲計算: 雲計算最火的語言, 典型應用OpenStack

  • WEB開發: 眾多優秀的WEB框架,眾多大型網站均為Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django

  • 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas

  • 系統運維: 運維人員必備語言

  • 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤其擅長策略回測

  • 圖形GUI: PyQT, WxPython,TkInter

Python在一些公司的應用:

  • 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發

  • CIA: 美國中情局網站就是用Python開發的

  • NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算

  • YouTube:世界上最大的視頻網站YouTube就是用Python開發的

  • Dropbox:美國最大的在線雲存儲網站,全部用Python實現,每天網站處理10億個文件的上傳和下載

  • Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發

  • Facebook:大量的基礎庫均通過Python實現的

  • Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的

  • 豆瓣: 公司幾乎所有的業務均是通過Python開發的

  • 知乎: 國內最大的問答社區,通過Python開發(國外Quora)

  • 春雨醫生:國內知名的在線醫療網站是用Python開發的

  • 除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。

Python 是一門什麼樣的語言?

編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每個分類代表什麼意思呢,我們一起來看一下。

編譯和解釋的區別是什麼?


編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;

解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.

這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)

人生苦短,我用Python之基礎教程(一)

人生苦短,我用Python之基礎教程(一)

編譯型vs解釋型

編譯型

優點:編譯器一般會有預編譯的過程對代碼進行優化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程序執行效率高。可以脫離語言環境獨立運行。

缺點:編譯之後如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件。

解釋型

優點:有良好的平臺兼容性,在任何環境中都可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。

缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。

Python的優缺點

先看優點

  1. Python的定位是“優雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程序。

  2. 開發效率非常高,Python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,Python官方庫裡都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發週期,避免重複造輪子。

  3. 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節

  4. 可移植性————由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程序無需修改就幾乎可以在市場上所有的系統平臺上運行

  5. 可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然後在你的Python程序中使用它們。

  6. 可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

再看缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的運行速度慢在大多數情況下用戶是無法直接感知到的,必須藉助測試工具才能體現出來,比如你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種情況下,當然還是建議你用C去實現的。

  2. 代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源代碼必須是加密的,那你一開始就不應該用Python來去實現。

  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global 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

IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。

CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。

PyPy

PyPy是另一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),所以可以顯著提高Python代碼的執行速度。

絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。如果你的代碼要放到PyPy下執行,就需要了解PyPy和CPython的不同點。

Jython

Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java字節碼執行。

IronPython

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

小結

Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是通過網絡調用來交互,確保各程序之間的獨立性。


分享到:


相關文章: