偽·從零開始學Python - 1.1 認識Python
Python的簡要介紹
Python是一種多模型的、開源、跨平台的腳本語言、高級編程語言、通用型編程語言,由吉多·范羅蘇姆(Guido van Rossum)在1989年聖誕節期間,為了打發無聊的聖誕節而編寫。
Python是多模型的,指的是它同時支持面向過程和面向對象的程序設計,程序設計方式靈活。
Python是開源的,指的是它由非盈利組織——Python軟體基金會(Python Software Foundation, PSF)擁有、管理,由社區驅動,解釋器源代碼公開,屬於自由軟體。它在開源促進會(Open Source Initiative,
OSI)支持的開源許可證下開發,使得它可以自由使用、分發,用於商業目的也是可以的。這個許可證被PSF管理。Python是跨平台的,指的是它可以在多個操作系統上使用、運行,如Windows、Linux、Unix、macOS。而且,對於絕大多數使用Python編寫的代碼而言,無需修改或僅需極少量修改即可直接在不同平台上運行。
Python是腳本語言(或:解釋型語言),指的是它利用解釋器將代碼一句一句直接運行,不同於編譯型語言(通過編譯器將整個代碼編譯為機器碼,執行、分發程序時只需編譯生成的機器碼文件;如C語言)。通常來說,Python程序的運行需要解釋器和源代碼,也可通過封裝的方式將其組合,可以在未安裝解釋器的客戶端上使用。
Python是高級編程語言,指的是它使用類似於人類語言(而非機器語言)的語言形式來書寫代碼,具有較高的可讀性。
Python是通用型的編程語言,指的是它可以編寫解決任何問題的應用程序。
Python的優勢與劣勢
前面提到過,Python是通用型的編程語言,指的是它可以編寫解決任何問題的應用程序。
不過,這並不是Python的優勢:它可以寫的東西,其他語言也可以寫。
Python相對於其他語言有兩個明顯的優勢:
第一,它提供了非常完善的基礎代碼庫,覆蓋了網路、文件、GUI、資料庫、文本等大量內容,被形象地稱作「內置電池(batteries included)」。用Python開發,許多功能不必從零編寫,直接使用現成的即可。
第二——也是最重要的,它擁有龐大的第三方庫,除了直接使用外,還可以通過pip、conda等軟體包管理工具來下載、安裝、更新,而且許多知名的第三方庫可以非常輕鬆地被調用,功能也相當強大。
作為腳本語言,Python的運行效率不如編譯型語言,運行相同功能的代碼所需時間更長。但是,隨著計算機硬體技術的發展,這樣的差別變得可以忽略。
但是,由於它是解釋型語言,所以依賴於解釋器,在效率、對內存的操作和處理器的控制明顯比編譯型語言弱。所以,它不適合寫系統軟體。尤其是操作系統,由於高度依賴於硬體控制,它應該是不能寫的。
而且,由於iOS的生態系統的高度封閉性,它也不能直接寫iOS應用;對於Android,雖然有適用於Android的解釋器,但其封裝還是有難度的,而且針對於Android上的Python的庫(尤其是GUI相關的庫)和文檔不發達,所以它目前也不適宜寫Android應用。
有很多人把Python當作「膠水語言」來使用,即使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google應用服務引擎,使用C++編寫性能要求極高的部分,然後用Python或Java/Go調用相應的模塊。
這很難講,不過,2004年,Python已在Google內部使用,Google召募許多Python高手,但在這之前就已決定使用Python。他們的目的是盡量使用Python,在不得已時改用C++;在操控硬體的場合使用C++,在快速開發時候使用Python。
——馬特利(Alex Martelli),《Python技術手冊》的作者
Python目前的應用
很多大公司,包括Google、Yahoo等,甚至NASA(美國航空航天局)都大量地使用Python。
目前Python主要有下列熱門領域的應用:
爬蟲
使用Requests構建HTTP請求,使用selenium和PhantomJS獲取網頁內容,使用BeautifulSoup解析HTML,可以高效地爬取數據。
科學計算、數據分析與數據可視化
使用NumPy、SciPy、matplotlib、Pandas、wordcloud等第三方庫進行高等數學、線性代數等相關的科學計算、對數據進行可視化輸出,使用jieba進行分詞。可以部分替代付費的MATLAB、Office,而且在繪圖的信息獲取上比Office更加靈活。
人工智慧與機器學習
谷歌開發維護的TensorFlow以Python為主,進而推動了其他的關於人工智慧的開發,所以現在凡是人工智慧、機器學習,都離不開Python。
交易
有人通過爬蟲爬取新聞和交易信息,通過數據分析和預測輔助決策;有人寫出交易的程序,如vn.py。
Web框架
有Django這樣的功能齊全的框架,也有Flask、Tornado這樣的輕量級框架。使用Python作為Web框架的最大的好處就是可以以網站的形式輕鬆解決上面的問題。許多大型網站就是用Python開發的,例如YouTube、Instagram,還有國內的豆瓣。
硬體控制與物聯網
儘管Python是解釋型語言,但樹莓派為代表的單板計算機解決了它在控制硬體上的問題。在它上面可以在Linux的環境下用Python控制GPIO,從而控制外圍硬體。另外,也有人正在開發硬體解釋器,可以在上面直接運行Python代碼控制GPIO,如Python-on-a-chip。
兩大版本
Pyhon目前同時有兩個最新版本供下載。這是因為兼容性的問題。
Python 3.0於2008年12月3日發布,此版由於追求語言設計上的完美、不帶入過多的累贅,不完全兼容之前的Python源代碼。由於Python擁有大量的第三方庫,所以這些庫都需要重寫以兼容新版本。到了今天,由於3.x版越來越普及,許多主要的第三方庫都完成了適配或有了替代品,而且有一些已經開始拋棄2.x版的適配,所以現在建議使用3.x版本進行Python開發。
以下如涉及到版本問題,使用「Python 2」「Python 3」指代對應版本系統。
在Python 3.0發布的時候,同期的Python 2的版本為2008年10月2日發布的Python 2.6.0。在此及之後的Python 2版本中也可直接或間接使用Python 3的一些特性,但並不是完全兼容。而在Python 3中也附帶有2to3來將適配於Python 2的代碼轉換為適配於Python 3的代碼,但也不是萬能的。
Python 2的最後的版本為Python 2.7,但也是有更新的。
但是,正是由於上面的問題,我們在學習Python的時候需要特別注意Python的版本。雖然Python是最近才走進大眾的視野的,但是許多學校的圖書館很早就藏有關於Python的較老的書籍,而它們一般都是基於Python 2編寫的,如果在Python 3下運行會報錯。而且,一般的書籍不會標註Python的版本號(也許是編寫時想不到新版的Python會這樣)!所以在圖書館借閱關於Python的書籍的話,必須要翻閱其中的代碼,以便辨認版本。
據我的經驗,查看代碼時,只要找輸出(print
)語句,看它的寫法,十有八九就能準確判斷版本:
Python 3中的輸出語句如同:
print("Hello World")
Python 2中的輸出語句如同:
print "Hello World"
簡而言之,就是帶不帶括弧的區別:帶括弧是3,不帶括弧是2。
雖然Python 2.6、Python 2.7也可以在輸出語句上如同Python 3那樣寫,但是那個時候的程序員由於習慣原因是不會這麼寫的。
如果是購買書籍的話,如果是比較負責的編者或出版商,而且書籍是最近幾年發布的話,這樣的問題可能會有所避免。
但是,Python 3與Python 2的區別絕不僅僅是print
語句的變化,還有許多。這不屬於本教程內容,感興趣的話可以自行查閱。
本教程基於Python 3的最新版本。
作業
- 上面對於Python的簡要介紹中使用了一些詞語,我在這裡對於它們的解釋並不完全,請自行查找關於它們的更多信息,盡量搞懂它們。(其實「面向對象」我也沒搞懂……)
- 在Python界中有一句話:「人生苦短,我用Python。」根據本節講述內容說明原因(當然,如果你願意查找資料,也可以不限於本節內容來說明)。
參考資料
除0.1節提到的之外,還有:
- About Python? | http://Python.org
https://www.python.org/about/
- Download Python | http://Python.orghttps://www.python.org/downloads/
- matplotlib - 維基百科,自由的百科全書https://zh.wikipedia.org/wiki/Matplotlib
- TensorFlowhttps://www.tensorflow.org/
- vn.py - 基於python的開源交易平台開發框架 - vn.pyhttp://www.vnpy.org/
- The Web framework for perfectionists with deadlines | Djangohttps://www.djangoproject.com/
- Raspberry Pi - Raspberry Pi Hardware Guide requirements | Raspberry Pi Learning Resources
https://www.raspberrypi.org/learning/hardware-guide/components/raspberry-pi/
推薦閱讀:
※C語言基礎:函數的聲明與定義
※多維度分析2017年最熱門的編程語言
※html5可以做什麼?HTML5市場需求有哪些?
※AppleScript類自然語言與非英語語法設計