這兩天被派去受 "Python 進階班" 的訓, 有一段時間沒接觸 Python 了, 趁這個機會溫習一下也好. 老師使用的是 Python 3, 而我以前在 GAE 用的是 Pyhton 2, 但其實差異沒有很多啦. 以下就這兩天的 Python 3 學習做個摘要整理.
Python 是一種跨平台的指令碼語言 (Scripting language), 乃 Python 之父 Guido van Rossum 為了發展 Amoeba 分散式處理作業系統, 於 1989 年以其先前發展之 ABC 教學語言為基礎, 揉合了 modula-3, UNIX shell, Icon, SmallTalk 與 C 語言的風格於荷蘭阿姆斯特丹大學發展而成. Python 語言的基本哲學是 : 做事時應該只有一種明確的方式, 這使得 Python 程式較簡潔易學.
Python 虛擬機器可在多種 OS 上運作, 但最先是在 Mac 機器上實作的. Python 的圖騰是一隻蟒蛇, 但其名稱的由來卻與蟒蛇一點關係也沒有, 而是源自英國 BBC 著名的喜劇影集 "Monty Python’s Flying Circus" 來的. 而其整合開發環境叫做 IDLE 而非 IDE 的原因是 Monty Python 開發小組的一個成員名為 Eric Idle 的緣故.
Python 在 2000-10-16 發布了 Python 2.0, 支援垃圾回收與 Unicode, 此版本是 Python 大受歡迎的開始. 2008-12-03 又發布了 Python 3.0, 但與舊版本不完全相容 (not backward-compatible), 這在程式語言演進上較為罕見. 關於 Python 2 與 Python 3 的差異可參考這篇 :
Python 語言的特色整理如下 :
Python 是物件導向的直譯式語言 (Interpreter language), 與 Java/C++ 等編譯語言比起來, 省掉了編譯與連結步驟, 簡化了開發流程, 但事實上是把中介碼 byte code 的編譯動作隱藏起來了.
Python 與 Javascript, PHP 等語言一樣均屬於腳本語言 (Scripting language), 其與系統語言 (C/C++) 之差異是 : 系統語言目標是節省系統資源, 提高執行效能 (資訊家電需求), 而腳本語言之目標是節省程式員時間, 提高開發速度 (應用程式需求).
Python 是動態語言 (Dynamic language), 在執行時期才確定資料型別, 這與 Javascript, VBscript, Ruby 等語言是相同的.
Python 是強型別語言 (Strong-typed language), 資料型別須透過顯式型別轉換才能混合運算, 如同 Java.
Python 不是格式自由語言, 採用強制縮排定義程式區塊, 以換行表示敘述結束. 縮排是語法的一部分, 違反縮排規則將無法執行.
Python 是跨平台語言, 早期本身是用 ANSI C 語言撰寫的, 可以在 Unix/Linux/DOS/Windows/Macintosh 等作業系統上執行. Python 程式執行時會編譯成 pycode 中介碼, 與 Java 的 bytecode 類似.
Python 是開放源碼 (Open source) 的.
Python 內建比 Java/C/C++ 還豐富的資料型別, 從而有效地減少程式碼長度.
Python 內建複數型別, 支援複數運算.
Python 是完全物件導向的語言, 不論資料, 字串, 函式, 模組全部都是物件. 完全支援多重繼承, 多型, 過載, 衍生, 與泛型, 使程式碼可重複使用. 同時也有例外處理機制, 具備垃圾回收功能, 自動管理記憶體之使用.
利用 py2exe, pypy, pyinstaller 可將 Python 原始碼轉成脫離編譯器執行環境的獨立執行程式.
Pyhton 的設計哲學 : 優雅, 明確, 簡單. 希望 "用一種方法, 最好是只有一種方法來做一件事", 而非像 Perl 那樣 "有多種方法來做同一件事", 盡量避免歧義, 因此 Python 原始碼具有高度的可讀性.
Python 雖然被歸類為 "指令碼/描述語言 (Scripting language)", 但其功能遠比 Shell script, Javascript, VBscript 等僅能處理簡單工作之指令碼語言強大, Python 開發者稱其為一種 "高階動態語言".
Python 也被稱為 Glue language (膠合語言), 能夠將其他語言編寫的程式進行整合與封裝.
大多數 Linux 發行版本都已整合了 Python, 可以在終端機下直接執行 Python.
Python 語言的架構是可延伸的, 並非所有的功能與特性都整合到核心, 而是歸類於其強大的標準函式庫中, 從而避免像 VBscript 那樣臃腫. Python 輕巧的語言核心只包括數字, 字串, 串列, 字典, 檔案等資料型別與函式, 其他額外功能如系統管理, 網路通訊, 文字處理, 資料庫, 圖形介面, XML 等全部由標準函式庫提供. 另外社群還提供豐富的套件, 如 Web 開發, 科學計算等等.
Python 標準函式庫包含多個作業系統功能呼叫函式庫, 透過 pywin32 套件可以存取 Windows API 與 COM 服務; 而透過 IronPython 則可直接呼叫 .Net Framework.
以 Python 編寫系統管理指令在可讀性, 效能, 重覆使用, 擴充性方面都優於 shell 指令.
Python 已有的實作 : CPython (C), JPython (Java), PyPy (Python), IronPyhon (.Net).
以上都是關於 Python 的背景知識, 現在 Python 越來越受歡迎, 不僅在科學計算領域被廣泛使用, 許多大學如 MIT 與柏克萊等校之資訊科學系也改用 Python 作為學生必修語言, 目前 Python 在 TIOBE 排行已經穩定在前五名 :
自 Python 1.0 於 1994 年問世以來, 過去 22 年來 Pyhton 的排名從 26 名穩定上升到目前的第五名, 其受歡迎的程度可見一斑 :
此外在嵌入式系統應用中, Python 也是樹莓派 Raspberry Pi 的預設作業系統 Raspbian 的內建程式語言, 樹莓派也因為 Python 龐大的第三方套件而展現驚人的功能, 廣泛應用在無人機, 機器人, 影像辨識, 自然語言處理等領域. Python 的厲害在於其豐富的第三方套件, 在 PyPi 網站上已登錄超過 9 萬個套件, 各種應用應有盡有, 參考 :
# https://pypi.python.org/pypi
學習 Python 要先安裝其執行環境, 首先到官網下載 Python :
# https://www.python.org/downloads/
如果要安裝 64 位元版本, 到下列網址尋找 x86-64 exceutable 版的 :
# https://www.python.org/downloads/windows/
目前最新版是 3.5.2, 如果是用在 GAE 的話要下載 2.7 版, 因為 GAE 尚未支援 Python 3. Python 2.7 版也是 Python 2 的最後版本.
安裝 Python 時要注意更改安裝路徑以及勾選 "Add Python 3.5 to PATH" :
注意, 這裡要選 "Customerized installation", 這樣才能更改安裝路徑 :
這個只要按 Next 即可 :
這裡就是修改安裝路徑的地方, 將原先又臭又長的路徑改為 C:\Python35 即可. 這樣安裝完後在 DOS 視窗的任何目錄下打 Python 都能執行 Python 程式.
直接輸入 Python 指令馬上即輸出結果. 例如 :
>>> 2+3
5
>>> print(2+3)
5
如果要跳出 Python 直譯器, 可輸入 exit() 或 quit() 或按 Ctrl+C 即回到 DOS 命令列.
此外也可以使用 Python 內建的 IDLE 交談式介面來執行 Python 程式, 其功能比由 DOS 進入 Python 執意環境要多, 例如可以編輯 Python 程式後點選 Run Module 來執行檔案.
當下了一些指令後, IDLE 視窗就會塞滿指令與回應, 能不能像在 DOS 一樣下個 CLS 指令就清除畫面呢? 很遺憾的是 IDLE 並沒有這樣的單一指令. 不過可以照下列文章介紹的方法為 IDLE 添加清除畫面快捷鍵 :
先下載 ClearWindow.py 程式, 將其放在 Python 3 安裝目錄的 C:\Python35\Lib\idlelib 下, 然後用記事本編輯此目錄下的 config-extensions.def 檔, 將下列指令複製到檔尾後存檔, 將 IDLE 重開即可在 Option 下看到新增的 "Clear Shell Window" 功能選項了, 按此可清除畫面 :