Python 現在會如此受到初學者的歡迎,一定有它的原因。我個人認為,Python 有下列三個特點,造就它今日的地位:「語法簡單」、「工法完整」、「應用廣泛」。此外,Python 也有「執行緩慢」的缺點。我們將在這個小節,逐一討論 Python 的優缺點,作為您是否要學習 Python 的參考依據。
優點一:語法簡單
一個程式語言要受到初學者歡迎,端看它能在多短的時間內,帶給初學者「成就感」與「信心」。如果用「在螢幕上印出『Hello! World!』這串字」當成比賽題目,看使用 C、Java、Python 三種語言的程式師,可以率先達到目標。那麼 Python 一定是從按下碼表後,第一個達標的。
讓我們先看 C 語言。C 語言得寫出下面這段程式碼、存檔、拿著這個原始碼檔去編譯,才能在螢幕上印出「Hello! World!」:
#include <stdio.h> int main() { printf(“Hello! World!\n”); }
接著來看 Java 語言。跟 C 語言很類似,得寫出下面這段程式碼,歷經「存檔、編譯、執行」三步驟後,在螢幕上印出「Hello! World!」字樣:
public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello! World!”); } }
最後是 Python。Python 只要寫下面這段原始碼,直接按 Enter 鍵,不必存檔、不必編譯,就能直接執行,並印出「Hello! World!」字樣:
print(“Hello! World”)
什麼?就一行?是的!就一行!聰明如您,如果想在螢幕上印出一串字,您會選擇 C?Java?還是 Python 呢?除此之外,Python 還有許多「別人寫十行,我只寫一行」這種「以一打十」的範例。這樣,您分辨得出來哪種語言的語法比較簡單了嗎?
優點二:工法完整
先說明把「工法」這個名詞用在這裡,是我擅自認為這兩個字比較能表達我想說的「意境」才用的,這個名詞並非資訊業界的流通用語。「工法」指的是撰寫程式的原則與方法。在各類程式語言中,常見的「工法」有三種:程序導向、物件導向、函數導向。大家不要被「XX 導向」什麼的嚇到了,我說個比喻您就會懂。就像一盤青江菜,您可以炒成浙式、川式、廣式三種。本質都是「炒青江菜」,但在作法與過程上,有些不同罷了。程序導向、物件導向、函數導向也是如此,都是能做出特定結果的程式寫作方法而已。
但不是任何語言,都能任意使用上述三種工法,還得該語言有支援某工法的「語法」才行。就像用「潛盾工法」在地底挖隧道,並不適用於任何地質,太鬆軟的地質只能用「明挖覆蓋法」直接破壞表面了。以常見的語言來說,C 語言只支援「程序導向」;Java 支援「程序導向」與「物件導向」,直到 Java 8 之後,才補上支援「函數導向」的語法;而 Python 很早就支援「程序導向」、「物件導向」、「函數導向」三種工法,所以學會 Python 後,學習任何其它語言都會快!就像有「學會西班牙語後,學法語、義大利語都會快」此一說法一樣。
正因 Python 支援的工法完整,學了 Python 之後學其它語言不會慢到哪裡去,所以各大專院校才會鼓吹初學者,把 Python 作為第一個程式語言。這也成為 Python 受到初學者歡迎的原因之一。
優點三:應用廣泛
Python 另一個受到初學者歡迎的原因,是它能以一種語言,用在網頁設計、手機 App 撰寫、遊戲程式設計、硬體自動控制、生物醫學、大數據…等領域。簡單一句話,就是「萬用語言」。這對還沒決定、或還不知道該走哪個領域的初學者來說,非常重要!沒有人想花大把時間學會一個語言後,發現自己喜歡的領域用的是另一種語言,又含著眼淚帶著微笑重頭去學的。
Python 能做到「萬用語言」的原因,莫過於他有豐富的「函式庫(Library)」。所謂「函式庫」,就是把別人事先寫好的一些好用 Python 程式打成一包,允許你直接取用,而不必學習這些程式背後的寫作原理。拿通俗一點的比喻,就像遊戲軟體內的「外掛」,直接使用後,可以讓你不必花力氣去打怪練功,就能取得高分或強力的裝備。
舉例來說,如果您想用 Python 寫個網站,那就加掛 Django 這個函式庫。裡面已經有「建立帳號」、「使用者登入」…等等寫好的功能讓你直接叫用,不必什麼都得自己重頭寫。想寫遊戲,就加掛 PyGame。什麼打光、旋轉、碰撞偵測…人家都幫你寫好了,寫個三行直接叫用就行了!還在頭痛想怎麼同時間學兩種程式語言,並且在 Android、iOS 雙平台寫手機 App 嗎?不必了!用 Python + Kivy 函式庫寫出來的手機 App,讓你能直上兩大平台!想做個自走車還是機械手臂來玩玩?沒問題!花個台幣一千多元買塊 Raspberry Pi 開發板,讓你用內建的 Python 函式庫控制 LED 燈、馬達…等各種硬體電路!其它如生醫領域的 DNA 序列研究、經濟領域的大數據,Python 都有對應的「外掛(函式庫)」供人直接取用。讓你吹著口哨、比別人提早抵達終點。
缺點:執行緩慢
前面講了 Python 這麼多好話,它並不是完全沒有缺點。Python 雖然適用於各行各業,但它有個致命傷:慢!
其實這點並不難理解。假設您有把裡面有螺絲起子的瑞士刀,雖然它能拿來轉螺絲,但沒辦法像專業的螺絲起子做得長長的,發揮強大的力矩槓桿作用,讓螺絲轉起來輕鬆容易。更別提有人拿笨重、但迅速的專業電動螺絲起子了。
Python 也是如此!所謂「追二兔不得一兔」,為了能在各種場合都發揮作用,就得取各種場合的「平衡點」,沒辦法為單一情況做「最佳化」!正如那把瑞士刀,雖然它能做各種事情,但不可能如專業工具稱手。Python 的架構工程師,最後就做出「為了功能,犧牲效能」的決定。
不過最近幾年,也有 Python 同好開發出「Python 編譯器」,就是直接把 Python 原始碼,翻譯成 0 與 1 來表示的軟體。不過「編譯器」也不是萬靈丹!經過實際測試,編譯成二進位碼的 Python 某些時候跑得比 Java 還快,但某些場合又吊車尾。所以這完全看「Python 編譯器」的好壞。編譯得好,就跑得快;編譯得不好的部分,自然效能就差了點。
但有一派人士的說法:CPU 效能年年加快,Python 本身效能緩慢問題,應該能被新的 CPU 速度稍稍解決。所以我的看法,還是鼓勵初學者不用太在意「速度」這件事,先把你想寫的東西用 Python 寫出來比較要緊!畢竟「先求有,再求好」。如果將來「速度」真的成了致命傷,到時候再來想想如何加速就可以了!
結論:學 Python,應用廣,轉檯易!
所以,如果您是對自己比較沒信心,或是還沒決定走哪個領域的朋友,那就先學 Python!不但好學,而且將來想轉檯到其它語言也快!但若您已經確定自己有興趣的領域,比如「遊戲程式設計」,那我會建議您直接學該領域的專用語言比較好。以「遊戲程式設計」來說就是 C++。
至此,不知您是否對於該不該學 Python 語言,心中已經有答案了呢?
如果是golang和pythion,您會建議學那一種呢? 目前想學php以外的語言正在研究。
雖說語言本身拿來做哪個領域都可以。但個人覺得,Go 語言的應用面比較偏網頁應用,Python 比較偏資料科學或人工智慧。這就看您對哪個領域有興趣,進而選擇哪個語言囉~
經過四年,慢的這個問題消失了嗎?
比起四年前,是有些進步。但進步幅度,還是不足以打敗一些以效能掛帥的程式語言。因為其它語言也有些進步。以 C++ 來說,這四年經歷了 C++17 與 C++20 兩個版本。改進部分雖非都著重在效能,但 Python 要迎頭趕上,還是要多加一把勁。