天天看點

Python概要介紹

Python的由來

    Python的創始人(Guido Van Rossum)吉多·範羅蘇姆——龜叔,1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程式,做為ABC 語言的一種繼承。之是以選中Python(大蟒蛇的意思)作為程式的名字,是因為他是一個叫Monty Python的喜劇團體的愛好者。

    ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言非常優美和強大,是專門為非專業程式員設計的。但是ABC語言并沒有成功,究其原因,Guido 認為是非開放造成的。Guido 決心在Python 中避免這一錯誤。同時,他還想實作在ABC 中閃現過但未曾實作的東西。

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

Python的種類

    Python也分類,有Cpython、Jython、Ironpython、PyPy、Rubypython...

    大緻分為三類:Cpython、PyPy、其他Python(Jython、Ironpython、Rubypython...)。

    不管是哪種Python,實作過程都是先轉換成位元組碼,然後在相應的虛拟機上運作。PyPy有點特殊,是直接将Python代碼轉換成機器碼。而Cpython和其他Python是先轉換成位元組碼再轉換成機器碼。

Python的應用領域

    使用Python的技術範疇:

    資料分析: 2016/2月/11,美國科學家宣布發現引力波,分析觀測30年的資料。分析引力波資料的Python包:GWPY

    雲計算 : 典型應用——Python開發的OpenStack

    WEB開發: 衆多優秀的WEB架構,Django、flask、 tornado

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

    系統運維: 運維人員必備,slatstack(系統自動化配置和管理工具),Ansible(自動化運維工具)

    圖形開發: wxPython、PyQT、TKinter

    使用Python的企業:

    Google - Google Groups、Gmail、Google Maps、AlphaGo等,Google App Engine支援python作為開發語言

    NASA - 美國宇航局,從1994年起把python作為主要開發語言

    Dropbox - 美國最大的線上雲存儲網站,全部用Python實作,每天網站處理10億個檔案的上傳和下載下傳

    豆瓣網 - 圖書、唱片、電影等文化産品的資料資料庫網站

    BitTorrent - bt下載下傳軟體用戶端

    gedit - Linux平台的文本編輯器

    GIMP - Linux平台的圖像處理軟體(Linux下的PS)

    知乎(國外的Quora) - 社交問答網站,國内最大的問答社群,通過Python開發

    Autodesk Maya - 3D模組化軟體,支援python作為腳本語言

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

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

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

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

    更多案例:https://www.python.org/about/success/

風格介紹

     Python在設計上堅持了清晰劃一的風格,這使得Python成為一門易讀、易維護,并且被大量使用者所歡迎的、用途廣泛的語言。

     設計者開發時總的指導思想是,對于一個特定的問題,隻要有一種最好的方法來解決就好了。這在由Tim Peters寫的python格言(稱為The Zen of Python)裡面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另一種功能類似的進階動态語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。

     Python的作者有意的設計限制性很強的文法,使得不好的程式設計習慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規則。

    一個和其他大多數語言(如C)的差別就是,一個子產品的界限,完全是由每行的首字元在這一行的位置來決定的(而C語言是用一對花括号{}來明确的定出子產品的邊界的,與字元的位置毫無關系)。這一點曾經引起過争議。因為自從C這類的語言誕生後,語言的文法含義與字元的排列方式分離開來,曾經被認為是一種程式語言的進步。不過不可否認的是,通過強制程式員們縮進(包括if,for和函數定義等所有需要使用子產品的地方),Python确實使得程式更加清晰和美觀。

Python的優點

     Python的定位是“優雅”、“明确”、“簡單”,是以Python程式看上去總是簡單易懂,

初學者學Python,不但入門容易,而且将來深入下去,可以編寫那些非常非常複雜的程式。

    開發效率非常高,Python有非常強大的第三方庫,基本上你想通過計算機實作任何功能,Python官方庫裡都有

相應的子產品進行支援,直接下載下傳調用後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重複造輪子。

    進階語言,當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節

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

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

    可嵌入性,你可以把Python嵌入你的C/C++程式,進而向你的程式使用者提供腳本功能。

Python的缺點

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

    多線程支援不好。

    Python慢,Python相對C語言确實慢很多,但其實這裡所指的速度慢在大多數時候我們是無法感覺的,比如說,是用C語言程式開發了一個程式,執行需要花0.01秒,使用Python實作同樣功能的程式,需要花0.1秒的時間,雖然相差10倍,但是我們基本是感覺不到的。更多的時候,程式慢是程式員實作功能方式導緻的。就好像開罐頭的時候,有的人用牙咬,有的人用工具,這樣兩個人的效率相比起來就差了很多。

Python的解釋器

     Cpython

     Python的官方版本,使用C語言實作,使用最為廣泛,CPython實作會将源檔案(py檔案)轉換成位元組碼檔案(pyc檔案),然後運作在Python虛拟機上。

     Jyhton

     Python的Java實作,Jython會将Python代碼動态編譯成Java位元組碼,然後在JVM上運作。

     IronPython

     Python的C#實作,IronPython将Python代碼編譯成C#位元組碼,然後在CLR上運作。(與Jython類似)

     PyPy(特殊)

     Python實作的Python,将Python的位元組碼位元組碼再編譯成機器碼。

     RubyPython、Brython ...

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

Python的發展曆程

    1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。

    1991年,第一個Python編譯器誕生。它是用C語言實作的,并能夠調用C語言的庫檔案。從一出生,Python已經具有了:類,函數,異常處理,包含表和詞典在内的核心資料類型,以及子產品為基礎的拓展系統。

    Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.

    1999年 Python的web架構之祖——Zope 1釋出

    Python 2.0 - 2000/10/16,加入了記憶體回收機制,構成了現在Python語言架構的基礎

    Python 2.4 – 2004/11/30, 同年目前最流行的WEB架構Django 誕生

    Python 2.5 - 2006/09/19

    Python 2.6 - 2008/10/1

    Python 2.7 - 2010/07/03

    Python 3.0 - 2008/12/03 

    Python 3.1 - 2009/06/27

    Python 3.2 - 2011/02/20

    Python 3.3 - 2012/09/29

    Python 3.4 - 2014/03/16

    Python 3.5 - 2015/09/13

    2014年11月,Python2.7将在2020年停止支援的消息被釋出,并且不會在釋出2.8版本,建議使用者盡可能的遷移到3.4+。

    Python最初釋出時,在設計上有一些缺陷,比如Unicode标準晚于Python出現,是以一直以來對Unicode的支援并不完全,而ASCII編碼支援的字元有限。例: 對中文支援不好。     

    Python3相對Python早期的版本是一個較大的更新,Py3在設計的時候沒有考慮向下相容,是以很多早期版本的Python的程式無法再Py3上運作。為了照顧早期的版本,推出過渡版本2.6——基本使用了Python 2.x的文法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的文法與函數。     

    2010年繼續推出了相容版本2.7,大量Python3的特性被反向遷移到了Python2.7。

    2.7比2.6進步非常多,同時擁有大量3中的特性和庫,并且照顧了原有的Python開發人群。

    Python2 還是 Python3 ?

    py2.7是2.x系列的最後一個版本,已經停止開發,不再增加新功能。2020年終止支援。

    所有的最新的标準庫的更新改進,隻會在3.x的版本裡出現。

    龜叔決定清理Python2.x ,并且不再相容舊版本。 最大的一個改變就是使用Unicode作為預設編碼。Pyhton2.x中直接寫中文會報錯,Python3中可以直接寫中文了。

從開源項目看,支援py3的比例已經大大提高,知名的項目一般都支援py2.7和py3+。py3比py2更規範統一、去掉了沒必要的關鍵字。Python3.x還在持續改進。

    是以我們還是推薦大家使用Python3.x。