寫在最前面
先講結論,儘管本書的內容有些有點難,但這是一本針對新手寫的程式語言學習書!
話說,某個週末我在家裡趕專案進度,家裡讀國中的小朋友突然來跟我說...
兒子:「爸爸,我們學校好像要教寫程式了」
我:「是喔,你知道要教什麼程式語言嗎?」
兒子:「好像是教 Python...」
我:「蠻好的,那我來寫一本 Python 的書給你好了」
雖然我看小朋友的表情好像沒有很開心的樣子,但這本書的起源的確就是這樣來的。
在我大四那年開始接觸網路,當時為了想要做自己的網站而開始自學 HTML 跟 CSS,然後又希望網站可以看起來跟別人不一樣,所以也開始學一些簡單的程式。我的第一個程式語言是 ASP,才剛學完 if...else...
還有迴圈等簡單語法,連函數都還不太熟就開始在學校的電算中心打工寫選課系統。有一次看到同事打開了一個黑黑的畫面在敲打一些指令(後來才知道是終端機視窗搭配 Vim 在寫 Perl),感覺就像電影裡的電腦高手一樣,看起來好帥,而且程式語法看起來也比我寫的 ASP 有趣,便去學校圖書館找書來看,然後就試著用 Perl 幫家人的公司寫了一個簡易的排班系統。
這應該就是我第一次接觸開放原始碼的世界,接觸之後才發現開源的世界好寬廣而且好多厲害的人。後來因為工作的關係,寫了幾年的 Flash 跟 PHP(還因為這樣辦了台灣的第一屆的 PHP 研討會)以及 Python。
在 2009 年到 2013 年期間我用 Python 跟 Django 幫一些客戶開發官方網站或活動網站,也有在台灣的開源社群開了好幾堂的公開課程。不得不說 Python 寫起來真的比之前寫過的 ASP、Perl 以及 PHP 要好寫很多。直到後來接觸了 Ruby/Rails 之後,發現在 Rails 裡的模組自動載入機制,不用寫一堆的 from ... import ...
就能直接使用,當時覺得這樣好方便(但這其實有別的問題),所以在 2013 年就跳轉到 Ruby 直到 2024 年,一跳就超過十年。
目前全世界的程式語言種類非常多,每種程式語言被設計出來都有它想要解決的問題或專門的用途,例如大家現在如果聽到 PHP 這個程式語言的時候,應該不會認為它是用來做手機應用程式。講到 Python,現在大家可能會聯想到機器學習或人工智慧,Python 是一款泛用型的程式語言。Python 早年的關注度是還不錯但並沒有像現在這麼高,就以 TIOBE 這個程式語言排行榜的數字來看,原本差不多就跟 PHP、Ruby 等程式語言差不多的排名。但誰也沒料到,自從 2016 年 AlphaGo 橫空出世打敗世界棋王之後,深度學習、機器學習、人工智慧等相關技術開始被大家關注到,當時的熱度普遍都還只有在開發者之間,但這時候坊間 Python 的相關書籍已經明顯的增加了不少。
直到 ChatGPT 的出現,原本的舊時王謝堂前燕,講到人工智慧大家會想到的可能是得要研究演算法、要看好多論文,突然飛入尋常百姓家,連我坐在路邊攤吃個宵夜都能聽到隔壁桌的大叔或阿桑在談論 AI,書店的 Python 書突然變成好幾櫃,Python 在 TIOBE 的排行瘋狂的往前衝,直接衝到第一名,幹掉 C、C++、Java 這些長期霸榜的程式語言。
TIOBE Index: https://www.tiobe.com/tiobe-index/
比較認識我的朋友可能知道我平常除了寫程式、開發專案外,同時也有經營一家電腦補習班(是台北市合法登記的那種補習班),所以我有一半以上的時間在我們的培訓班協助學員們轉職軟體工程師。這些年來我們都是使用程式語言 Ruby 以及網站開發框架 Ruby on Rails 做為我們培訓課程的後端教材。不過隨著市場趨勢的變化以及同學們的敲碗聲,再外加我們家小朋友的課業需求,所以我們也試著做一份 Python 版本的教材。
老實說,我並不認為我所學的程式知識有什麼特別之處,很多知識也是從網路上的開源資源學來的。秉持著吃果子拜樹頭的精神,本書內容將全部在公開於「為你自己學 Python」網站上,網站上內容除另有標示外將以 CC BY-NC-SA 4.0 方式授權。不論是已經工作一陣子的社會人士,或是在校學生,或甚至在學校準備教學生寫程式的教師,希望可以藉由這樣免費開源的方式釋出教材,能讓大家可以用更低的成本學習寫程式的技能。
為你自己學 Python https://pythonbook.cc
本書內容
目前主流的 Python 版本是 3.x 版,事實上 Python 3 在 2008 年就上市了,當年由於 Python 2.x 跟 3.x 之間的語法的不相容,導致 Python 的開發者社群從 2.x 版升級到 3.x 版之間拉扯(或分裂)了滿久的時間。隨著時間推進,雖然 Python 2.x 版還是可以使用,但官方已宣佈在 2020 年之後不會再繼續幫 2.x 版的 Python 增加新功能。本書在撰寫的當下最新版本是 3.12.4
版,沒有特別註明的話,本書將使用這個版本做展示。
這本書主要目的是跟大家一起學習 Python 這個程式語言,試著用 Python 做個小工具來完成日常的瑣碎工作,或是做個自己也用到的網站服務,本書內容會包括:
- Python 程式語言的語法介紹。
- 用 Python 寫一些簡單的小工具。
- 使用輕量的 Flask 建立 API。
- 使用網站開發框架 Django 建立功能更完整的網站應用程式。
- Flask: https://flask.palletsprojects.com/
- Django: https://www.djangoproject.com/
也就是說,本書主要將以 Python 程式語言以及網站開發為主,不會有人工智慧或機器學習等相關內容(我自己目前也還夠不熟悉,而且我相信坊間可以找到更多優秀的參考書籍),或是也許在下一本書再來跟大家介紹這方面的主題。
關於 Python
Python 怎麼唸?
雖然 Python 的英文是「蟒蛇」的意思,但這個程式語言跟蛇沒什麼關係。Python 應該怎麼發音?查了一下線上的劍橋詞典(Cambridge Dictionary),Python 的英式發音跟美式發音有一點不同:
- 英式:
/ˈpaɪ.θən/
- 美式:
/ˈpaɪ.θɑːn/
這兩種都有人唸,其實就算唸的不一樣大家應該都知道對方在唸什麼。如果硬是要選邊站的話,可以看看 Python 的發明者 Guido van Rossum 是怎麼唸的,Guido 是荷蘭人,我看了好幾部他在研討會演講或是專訪影片裡,他本人讀到 Python 的時候聽起來比較像是 /ˈpaɪ.θɑːn/
,以中文音譯比較接近的大概是「拍桑」。
哪些單位在使用 Python?
Python 目前在 TIOBE 排行第一名的程式語言,所以大概也不需要我再吹捧它有多受歡迎,有哪些大型企業或知名服務都採用 Python 進行開發,老實說,到底是誰在使用 Python 這件事我也不是很在意。
如同本書的標題「為你自己學 Python」,我一直相信,學習不需要為公司、為長官、同事、老師或是爸媽,而是為你自己。只有當自己真心認為學習對自己有幫助或是有趣,這條路才會走的長遠。
Python 可以用來做哪些事
Python 是一款通用型的程式語言,一開始並沒有特別設計用來處理特定的業務,目前普遍常看到的用途有:
- 撰寫自動化程式替我們完成原本需要人工操作的繁 瑣工作。
- 撰寫爬蟲程式抓取資料,並對資料進行進一步的整理及分析。
- 網站應用程式開發。
- 機器學習、人工智慧相關領域的應用。
Python 容易學嗎?
大家應該很常聽到 Python 是一款很容易上手的程式語言,這是真的。
就是因為 Python 的語法簡單容易上手,這對有學過其他程式語言的老司機來說可以學的更快,但也更容易發生「拿明朝的劍斬清朝的官」的情況,例如拿著其他程式語言的物件導向的經驗來學 Python 還滿容易踩到坑的。
所以,Python 容易學嗎?這個問題我先保留,等你看完這本書再告訴我答案。
關於本書
需要先學點什麼嗎?
如果之前曾經寫過 Python 以外的程式語言是不錯,沒有也沒關係,反正這本書本來就是設定給沒寫過程式的讀者看的。本書後半段會使用 Flask 以及 Django 框架來做點東西,過程中會用到 HTML、CSS 以及少部份的 JavaScript 及前端套件,不過這些技能不算是本書的重點,如果不太熟悉的話可再參考其他坊間的書籍。
閱讀順序
不一定要從第一章開始照著章節順序閱讀,你想要跳著看、躺著看或倒立著看也都可以。不過因為我在撰寫本書的時候所設定的讀者背景是沒有程式背景的新手,或只是寫過前端但沒碰過後端的網站工程師,所以本書的章節安排算是針對新手所設計的學習路線,建議不妨可以試著按照著章節的順序閱讀,可能會比較容易上手。
不過在本書中,偶爾會遇到比較難理解的章節,我也會在章節開頭就先提醒你如果看不懂可以先跳過,等比較熟悉之後再回來看也沒問題。學習本身並不是單行道、不是線性的,遇到障礙的時候,偶爾繞個路也沒什麼問題。逃避雖然可能有一點可恥,但在學習的路上倒是挺有用的。
程式碼慣例
在本書中使用的程式碼慣例,如果你在範例裡看到 $
符號開頭的,像這樣:
$ cd /tmp/hello-python
$ python -V
這個不是程式碼,這個 $
表示後面輸入的是一個系統指令,你應該是在終端機視窗(在 Windows 作業系統則是命令提示字元或 PowerShell)環境下透過敲打鍵盤輸入這些指令,而且不要跟著打 $
符號,輸入了反而會出錯。
除了 $
符號外,有時候你可能會在本書看到這樣的範例:
$ python
Python 3.12.4 (main, Jun 11 2024, 17:37:46) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hello")
hello
>>> 1 + 2
3
上面出現的 >>>
是進入 Python 的 Shell 環境,這個環境通常也會稱它 REPL,是 Read-Eval-Print Loop 幾個字的縮寫,我會常在 REPL 環境下試一些比較簡單的程式碼,所以同樣的也不要跟著輸入 >>>
符號。
有時候會為了聚焦重點或是不要讓整頁的篇幅被程式碼範例給佔滿了,我會視情況省略部份程式碼,簡化之後看起來大概會像這樣:
def hello
print("hi")
# ... 略 ...
print("hey")
別擔心,如果有需要,完整的程式碼我會另外再提供連結或 GitHub 供各位下載。
另外,在本書中如果看到我用開頭大寫的「Python」的時候,通常指的是 Python 這個程式語言;如果是全小寫的 python
的時候,通常指的是終端機指令或是或是用來執行 Python 程式碼的執行檔。
有問題可以問誰
在閱讀本書的過程中如果遇到些問題或發現有寫錯的地方,你可以在這本書的網站上留言,同時我們還有經營線上的 Discord 社群,裡面有個專門討論 Python 的頻道,應該也可以在裡面找到人。
不過如果你還是比較喜歡實體交流的話,不管只是想要找人聊天或討論技術上的問題,我們每週二晚上 19:00 ~ 22:00 在我們的教室(在台北市 228 公園旁)都有定期舉辦名為「默默會」的實體社群活動,歡迎大家有事沒事都來泡茶聊天。
- 線上討論:
- 線上網站: https://pythonbook.cc/
- Discord: https://5xcamp.us/discord
- 實體活動: