Python簡介

1.1 Python簡介

1.1.1 介紹

Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/)是著名的龜叔Guido van Rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個編程語言。
Python是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。
Python是一種解釋型語言,這意味着開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。
Python是交互式語言,這意味着,您可以在一個 Python提示符 >>> 後直接執行代碼。
Python是面向對象語言,這意味着Python支持面向對象的編程風格或代碼封裝在對象里的編程方式。
Python是初學者的語言,Python對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發,從簡單的文字處理到 WWW 瀏覽器以及遊戲。

1.1.2 發展歷史

Python是由 Guido van Rossum 在八十年代末和九十年代初,在荷蘭國家數學和計算機科學研究所設計出來的。
Python本身也是由諸多其他語言發展而來的,這包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix Shell 和其他的腳本語言等等。像 Perl 語言一樣,Python源代碼同樣遵循 GPL(GNU General Public License)協議。
現在 Python是由一個核心開發團隊在維護,Guido van Rossum 仍然佔據着至關重要的作用,指導其進展。
Python2.0 於 2000 年 10 月 16 日發佈,增加了實現完整的垃圾回收,並且支持 Unicode。
Python3.0 於 2008 年 12 月 3 日發佈,此版本不完全兼容之前的 Python源代碼。不過,很多新特性後來也被移植到舊的Python2.6/2.7版本。
Python的3.0版本,常被稱為Python3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。為了不帶入過多的累贅,Python3.0在設計的時候沒有考慮向下兼容。
新手推薦學習Python3.x入門。

1.1.3 特點

簡單:
Python是一種代表簡單主義思想的語言。閱讀一個良好的 Python程序就感覺像是在讀英語一樣,儘管這個英語的要求非常嚴格!Python的這種偽代碼本質是它最大的優點之一。它使你能夠專註於解決問題而不是去搞明白語言本身。
易學:
就如同你即將看到的一樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。
免費、開源:
Python是 FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。FLOSS 是基於一個團體分享知識的概念。這是為什麼 Python如此優秀的原因之一——它是由一群希望看到一個更加優秀的 Python的人創造並改進。
高級語言:
當你用 Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
可移植性:
由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有 Python程序無需修改就可以在下述任何平台上面運行。這些平台包括市場上主流的Linux、Windows、MacOS、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(圖形用戶界面)、Tk 和其他與系統有關的操作。記住,只要安裝了 Python,所有這些功能都是可用的。這被稱作 Python的功能齊全理念。除了標準庫以外,還有許多其他高質量的庫,如 wxPython、Twisted 和 Python圖像庫等等。
規範的代碼:
Python採用強制縮進的方式使得代碼具有極佳的可讀性。
Python之禪:
在安裝好的Python中,如果import this並運行後會出現一個小彩蛋,即Python之禪:
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it’s a bad IDEa.
If the implementation is easy to explain, it may be a good IDEa.
Namespaces are one honking great IDEa — let’s do more of those!
中文翻譯如下:
優美勝於醜陋(Python 以編寫優美的代碼為目標)
明了勝於晦澀(優美的代碼應當是明了的,命名規範,風格相似)
簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)
複雜勝於凌亂(如果複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔)
扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
可讀性很重要(優美的代碼是可讀的)
即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫 except:pass 風格的代碼)
當然存在多種可能,不要嘗試去猜測而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
雖然這並不容易,因為你不是 Python 之父(這裡的 Dutch 是指 Guido )
做也許好過不做,但不假思索就動手還不如不做(動手之前要仔細思量)
如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)
命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)

1.1.4 缺點

運行速度慢:
當然這個運行速度慢是相對的,和C程序相比肯定要慢,因為Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,所以非常快。但是大量的應用程序不需要這麼快的運行速度,因為用戶根本感覺不出來。
例如開發一個下載MP3的網絡應用程序,C程序的運行時間需要0.001秒,而Python程序的運行時間需要0.1秒,慢了100倍,但由於網絡更慢,需要等待1秒,你想,用戶能感覺到1.001秒和1.1秒的區別嗎?
當然,如果對速度有要求的話,可以用C++ 改寫關鍵部分。
代碼不能加密:
如果要發佈你的Python程序,實際上就是發佈源代碼,這一點跟C語言不同,C語言不用發佈源代碼,只需要把編譯後的機器碼(也就是你在Windows上常見的xxx.exe文件)發佈出去。要從機器碼反推出C代碼是不可能的,所以,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把源碼發佈出去。
這個缺點僅限於你要編寫的軟件需要賣給別人掙錢的時候。好消息是目前的互聯網時代,靠賣軟件授權的商業模式越來越少了,靠網站和移動應用賣服務的模式越來越多了,後一種模式不需要把源碼給別人。

1.1.5 應用

雲計算:雲計算最熱的語言,典型的應用OpenStack。
WEB開發:許多優秀的 WEB 框架,許多大型網站是Python開發,例如:YouTube、Dropbox、Douban等。典型的Web框架Django。
科學計算和人工智能:NumPy、SciPy、Matplotlib等
系統操作和維護:操作和維護人員的基本語言
金融:定量交易、金融分析,在金融工程領域,Python不僅使用最多,而且其重要性逐年增加。
圖形 GUI:PyQT、WXPython、TkInter