|
|
|
|
『《深入淺出 Python》提供了一種引人入勝的學習體驗,感覺就像一位友好及知識淵博的導師親自指導你。這本書在娛樂性和資訊性內容之間達到了完美的平衡,使學習 Python 變得有趣且有效。』 —William Jamir Silva(威廉·賈米爾·席爾瓦),Anaconda 軟體工程師
『這本書讓我們得以用一種有趣的方式來學習 Python 程式設計,所使用的開發工具與我同事日常使用的一樣。書中包含了一系列逐步加深的挑戰,讓我解決了一些在一開始無法應付的問題。書中對於"Pythonic"程式設計風格的介紹非常難得,且對讀者來說具有很高的價值,強調了「不止一種方法可以解決問題」。』 —Dave Marsden(戴夫·馬斯登), CTS 雲端架構師
『《深入淺出 Python》不僅提供你基礎知識,還剔除了所有不必要的冗餘內容。讓你在開發真實應用程式時,還能享受有趣的故事,同時建立 Jupyter notebooks,並在網路上部署可行的應用程式。如果Python在你的待學清單上,那就從這本書開始吧!』 —Daniel Hinojosa, 開發者/教師/演講者
『這是進入強大程式語言 Python 的絕佳起點,帶你踏上一段教育性和引人入勝的旅程,從概念到實際的網頁應用程式』 —Michael Hopkins(邁克爾·霍普金斯), P.Geo.(專業地質學家)/PMP(專案管理專業人士)
你將從這本書中學到什麼? 想要學習Python程式語言,但不想硬啃使用手冊嗎?透過這本《深入淺出 Python》,讓你能快速掌握Python的基礎知識,包括使用內建的資料結構和函式;然後建立自己的網頁應用程式(webapp),並在雲端上部署。你將學習到如何用Python處理資料、從網路抓取資料、使用pandas做資料分析、與資料庫互動。《深入淺出 Python》第三版是一個完整的學習體驗,能幫助你在短時間內成為一名合格的Python工程師。
本書為何如此與眾不同? 曾經讀過《深入淺出》系列的讀者一定知道,這本書充滿了專為大腦設計的視覺化風格,好玩、好讀又好吸收;尚未看過的讀者也別擔心,翻開書就是讓你欲罷不能的沉浸式學習!本書跳脫讓人眼睛酸澀又昏昏欲睡的技術文字,用圖像和情境打造多重感官的閱讀饗宴,帶你一口氣讀懂Python。學習原來可以這麼有趣又有感!
|
|
【簡介】
把你的心思放在 Python 上。此時,你正試著學習某些東西,而你的大腦也在幫助你確保學習活動不會被卡住。然而,你的大腦卻總是在想,「最好留點空間給更重要的事,像是,要迴避哪些野生動物?裸體滑雪是不是一個壞主意?」。那麼,要如何騙過你的大腦,讓它認為學好 Python 才是一件生死攸關的大事?
誰適合閱讀這本書? 我們知道你在想什麼 也知道你的大腦在想什麼 後設認知:「想想」如何思考 我們的做法 讀我 安裝最新版的 Python 僅使用Python 是不夠的 根據個人喜好設置 VS Code 將兩個必要的延伸模組添加到VS Code 中 VS Code 對Python 的支援是最先進的 技術審查團隊 致謝
【0 為什麼選擇 Python?:相似但不同】
Python 從零開始計數,這聽起來應該很熟悉。事實上,Python 與其他程式語言有很多共同之處。有變數、迴圈、條件判斷、函式...等。在這本書的開篇章節中,我們將為你進行 Python 基礎知識的高層次快速導覽,在不深入細節的情況下介紹該語言。你將瞭解如何使用 Jupyter Notebook (在 VS Code 中執行) 來建立和執行程式碼。你會發現很多程式設計功能都已內建於 Python 中,你可以利用這些功能來完成工作。你還將瞭解到,儘管 Python 與其他程式語言有許多相似之處,但它們在 Python 程式碼中的呈現方式可能會有所不同。然而,別誤會:這種不同是好的,而不是壞的。請繼續閱讀以瞭解更多...
要開始執行程式碼了 準備你的第一次 Jupyter 體驗 讓我們在你的筆記本編輯器中鍵入一些程式碼 按下 Shift + Enter 以執行你的程式碼 如果你想要更多張牌呢? 讓我們研究一下抽牌的程式碼 四大類型:清單、元組、字典和集合 使用集合來模擬一副撲克牌 print dir 混搭 求助於 dir 的輸出 將撲克牌填入集合 現在感覺就像是一副撲克牌了 「card」究竟是什麼呢? 需要找什麼嗎? 讓我們停下來並做個整理 Python 內建了一個內容豐富的標準程式庫 使用 Python,你只需撰寫你需要的程式碼 就在你以為你已經完成的時候...
【1 深入探索:讓我們大展拳腳】
學習新語言的最好方法就是編寫一些程式碼。 如果你打算編寫一些程式碼,你將需要一個實際的問題。幸運的是,我們就有一個這樣的問題。在本章中,你將開始你的 Python 應用程式開發之旅,與我們的好鄰居游泳教練一起大展拳腳。你將從 Python 字串開始,學習如何根據自己的需求操控它們,同時以基於 Python 的解決方案來逐步解決游泳教練的問題。你還將更深入地瞭解 Python 內建的清單資料結構,學習變數的工作原理,並學習如何閱讀 Python 的錯誤訊息,而不至於陷入困境,同時以實際的 Python 程式碼解決實際的問題。讓我們一起深入探索 (積極投入)...
教練目前的情況如何? 教練需要一只功能更強大的碼錶 辦公室閒聊 檔案和試算表是「相關聯的」 我們的第一個任務:提取檔名中的資料 字串是一個具有屬性的物件 從檔名中提取游泳選手的資料 不要試圖猜測一個方法的作用... 分割 (也稱為拆分) 字串 還有一些工作要做 閱讀錯誤訊息時,從下往上閱讀會比較好瞭解 當你在組合方法調用時要小心 讓我們嘗試另一個字串方法 剩下的就是建立一些變數 任務 #1 已完成! 任務 #2:處理檔案中的資料
【2 數字清單:處理清單資料】
你寫的程式碼越多,你的水準就會越好。就是這麼簡單。在本章中,你將繼續建立 Python 程式碼來協助教練。你將學習如何從教練提供的資料檔案中讀取資料,將其逐列載入到一個清單中,這是 Python 中最強大的內建資料結構之一。除了從檔案的資料來建立清單外,你還將學習如何從頭開始建立清單,並根據需要動態擴展清單。你將使用Python 最受歡迎的迴圈結構之一 ── for 迴圈 ── 來處理清單。你將把值從一種資料格式轉換為另一種資料格式,你甚至會交上一個新的好朋友 (你自己的 Python BFF)。你已經喝足了咖啡並吃飽了派,所以是時候捲起袖子,回到工作中了。
任務 #2:處理檔案中的資料 取得教練的資料副本 使用 open BIF 處理檔案 使用 with 開啟 (和關閉) 檔案 變數會根據需要動態建立 你真正想要的是檔案的資料 我們從檔案中取得了游泳選手的資料 接下來需要做的事情感覺很熟悉 上一章的學習正在帶來回報 將時間字串轉換為時間值 使用 Python 進行百分之一秒轉換 Python for 迴圈快速回顧 戰火升溫... for 迴圈與 while 迴圈的較量 你現在進展順利並取得了很大的進步! 讓我們保留一份轉換的副本 列出你的清單的方法 是時候計算平均值了 將平均值轉換為游泳時間字串 是時候把所有東西整合在一起了 任務 #2 終於完成了!
【3 檔案清單:函式、模組和檔案】
你的程式碼不可能永遠待在筆記本中。它想要自由。當涉及到釋放和共享你的程式碼時,量身定製的函式是第一步,隨後是模組,它讓你得以組織和分享你的程式碼。在本章中,你將直接從迄今為止所編寫的程式碼來建立一個函式,並在此過程中建立一個可共享的模組。當你以 for 迴圈、if 陳述式、條件測試和 Python 標準程式庫 (Python Standard Library 或 PSL) 來處理教練的游泳資料時,你將立即用到模組。你還將學習如何為你的函式添加註解 (這總是一個好主意) 。還有很多工作要做,所以讓我們開始吧!
你已經擁有大部分需要用到的程式碼 如何在 Python 中建立函式 根據需要隨時保存你的程式碼 僅僅複製程式碼是不夠的 務必複製你需要用到的所有程式碼 使用模組來共享程式碼 盡情享受回傳資料所帶來的喜悅 函式會在需要時回傳元組 讓我們來取得教練的檔案名稱清單 是時候進行一些偵探工作了... 你可以對清單做些什麼? 問題出在你的資料還是程式碼? 決定,決定,還是決定 讓我們在字串「中」尋找冒號 你最終處理了 60 個檔案嗎? 教練的程式碼正在成形...
【4 格式化字串字面值:從資料來製作圖表】
有時,最簡單的方法就能完成工作。在本章中,你終於要為教練製作長條圖了。你將只使用字串 (string) 來完成此項任務。你已經知道 Python 字串的內建功能非常強大,而 Python 的格式化字串字面值 (formatted string literals) (也就是 f-strings) 則以一些相當巧妙的方式增強了這些功能。我們提議使用文字來建立長條圖,你也許覺得奇怪,但正如你將發現的那樣,這並不像聽起來那麼荒謬。在此過程中,你將使用 Python 建立檔案 (file),並僅使用幾列程式碼來啟動網頁瀏覽器。最後,教練如願以償:根據他的游泳時間資料自動生成 (automatic generation) 圖表。讓我們開始吧!
使用 HTML 和 SVG 建立簡單的長條圖 從簡單的圖表到教練的圖表 在程式碼中建構你的 HTML 所需的字串 字串串接無法擴展 f-string 是 Python 的一個非常受歡迎的功能 用 f-string 生成 SVG 非常容易! 資料都在那裡或是沒有? 確定你傳回了需要的所有資料 你現在有數字了,但它們可用嗎? 剩下的就是網頁的結尾了 寫入檔案,像讀取檔案一樣,也很輕鬆 是時候展示你的傑作了 現在只剩下兩個美觀上的微調... 是時候使用另一個自定義函式了 讓我們在你的模組中添加另一個函式 那個百分之一秒的值怎麼了? (在這種情況下) 四捨五入不是你想要的 事情進展順利...
【5 安排資料:資料結構選擇】
你的程式碼需要將它在記憶體中的資料安排在某個地方...而當涉及到在記憶體中 (in memory) 安排資料時,你選擇使用哪種資料結構至關重要,而且這往往是區分一個有效但混亂的解決方案和一個運作良好且優雅的 (elegant) 解決方案的關鍵。在本章中,你將學習 Python 的另一個內建資料結構—字典 (dictionary),它通常與無處不在的清單結合使用,以建立複雜的 (complex) 資料結構。教練需要一個簡單的方法來選擇任何游泳選手的資料,而當你將教練的資料放入字典中時,查詢就變得輕而易舉!
讓我們提取游泳選手的名字清單 list-set-list 重複刪除技巧 教練現在有了一個名字清單 小小的改變帶來「巨大」的不同 每個元組都是唯一的 使用字典進行速度超快的查詢 字典是鍵值對查找的儲存結構 字典建構剖析 字典經過優化以實現快速查找 顯示整個字典 pprint 模組可以美化資料的列印 你的清單字典很容易處理 這真的開始成形了
【6 建構 webapp:網頁開發】
問十個程式設計師該使用哪個網頁框架...你可能會得到 11 個相互矛盾的答案!在網頁開發方面,Python 並不缺乏技術選擇,每個技術都有忠誠和支援的開發者社群。在本章中,你將深入研究網頁開發 (web development) ,快速為教練建構一個 webapp (網頁應用程式) ,用於查看任何游泳選手的長條圖資料。在此過程中,你將學習如何使用 HTML 模板 (templates)、函式修飾符 (decorators)、get 和 post 之類的 HTTP 方法...等。現在沒有時間可以浪費了:教練迫不急待地想展示他的新系統。讓我們開始吧!
從 PyPI 安裝 Flask 準備好你的資料夾來保存你的 webapp 在處理程式碼時,你有多種選擇 MVP Flask app 剖析 一點一點地建構你的 webapp... 那個 NameError 是怎麼回事? Flask 包含內建的期程支援 Flask 的期程技術是一個字典 以「更好的解決方案」調整你的程式碼 建構 Jinja2 模板可以節省你的時間 繼承 base.html 以建立更多頁面 動態建立下拉式選單 你需要以某種方式處理表單的資料 你的表單資料以字典的形式提供 函式支援預設參數值 預設參數值是可選用的 你的程式碼的最後版本,1/2 你的程式碼的最後版本,2/2 作為第一個 webapp,這看起來還不錯 教練的系統已經準備好了可以投入使用
【7 部署:在任何地方執行你的程式碼】
讓你的程式碼在你的電腦上執行是一回事...你真正想要的是部署 (deploy) 程式碼,以便用戶也能輕鬆執行它。如果你能夠毫不費力地做到這一點,那就更好了。在本章中,你將透過添加一些樣式 (style) 來完成教練的 webapp,然後再將教練的 webapp 部署到雲端 (cloud)。但別以為這會增加複雜度—事實並非如此。本書的前一版曾經吹噓部署只需要「大約 10 分鐘」,而現在這仍然是一項快速的工作...雖然在本章中,你將以 10 個步驟來部署 webapp。雲端正在等著託管教練的 webapp。讓我們開始部署吧!
還是有些地方感覺不對勁 Jinja2 執行 {{ 和 }} 之間的程式碼 雲端部署的十個步驟 你只需要一個初學者帳戶 沒有任何事情能阻止你開始... 有疑問時,就使用預設值 這個基本的 webapp 功能不多 將你的程式碼部署到 PythonAnywhere 在控制台中提取你的程式碼 設定 Web 標籤頁以指向你的程式碼 編輯你的 webapp 之 WSGI 檔案 你的雲端託管 webapp 已經準備好了!
【8 處理 HTML:網頁抓取】
在一個完美的世界裡,獲得你需要的所有資料非常容易。唉,這很少是真的。舉例來說:資料被發布在網頁上,嵌入在 HTML 中的資料將由網頁瀏覽器呈現給人類閱讀。但如果你需要使用程式碼處理嵌入在 HTML 中的資料呢?難道沒有辦法了嗎?幸運的是,Python 在從網頁中抓取資料方面相當出色,且在本章中,你將學習如何做到這一點。你還將學習如何解析這些被抓取到的 HTML 頁面以提取可用資料。在此過程中,你還將遇到切片 (slices) 和湯 (soup)。但是,別擔心,本書仍舊是《深入淺出 Python》而不是《深入淺出烹飪技巧》...
教練需要更多資料 在抓取資料之前先瞭解你的資料 我們需要一個行動計劃... 網頁抓取步驟指南 是時候使用一些 HTML 解析技術了 取得維基百科的原始 HTML 頁面 深入瞭解你抓取的資料 你可以從任何序列中複製切片 切片剖析,1/3 切片剖析,2/3 切片剖析,3/3 是時候展現 HTML 解析的威力了 在你的 soup 中尋找感興趣的標籤 傳回的 soup 也是可搜尋的 哪個表格包含你需要的資料? 四個大表和四組世界紀錄 是時候提取實際的資料了 從所有表格中提取資料,1/2 從所有表格中提取資料,2/2 那個巢狀的迴圈解決了問題!
【9 處理資料:資料操作】
有時,你的資料並沒有按照所需要的方式排列。也許你有一個「清單中包含清單 (list of lists)」的資料結構,但你真正需要的是一個「字典中包含自字典 (dictionary of dictionaries)」的資料結構。或者,你可能需要將一個資料結構中的值與另一個資料結構中的值關聯起來,但這些值並不完全匹配。唉...真是令人沮喪。別擔心:Python 的強大功能可以幫上忙。在本章中,你將使用 Python 來整理 (wrangle) 資料,把上一章末尾所抓取的資料轉變為真正有用的資料。你將能瞭解如何利用 (exploit) Python 的字典作為查找 (lookup) 表。本章將介紹轉換、整合、更新、部署等內容。最後讓教練的餐巾紙規格成為現實。等不及了嗎?我們也是...讓我們開始吧!
隨心所欲駕馭資料... 你現在擁有所需的資料... 應用你已經知道的知識 這裡的資料是不是太多了? 過濾接力賽資料 你現在已經準備好更新長條圖 Python 內建了一個 JSON 程式庫 JSON 是文字的形式,但不一定容易閱讀 接下來進行 webapp 整合 只需要進行編輯以及複製並貼上... 將世界紀錄添加到你的長條圖中 你的 webapp 最新版準備好了嗎? PythonAnywhere 已經為你準備好了... 你還需要上傳你的工具程式碼 將你最新版的 webapp 部署到 PythonAnywhere 告訴 PythonAnywhere 執行你最新版的程式碼 部署到雲端之前先測試你的工具程式 讓我們每天凌晨 1 點 (1:00am) 執行你的任務
【9.5 處理資料框:表格式資料】
有時候,好像全世界的資料都想要放在一個表格裡。表格式資料無處不在。上一章的游泳世界紀錄就是表格式 (tabular) 資料。如果你年紀夠大,還記得電話簿,那裡面的資料也是表格式的。銀行對帳單、發票、電子試算表:你猜對了,都是表格式資料。在本章中,你將學習關於 Python 中最流行的表格式資料分析程式庫之一 pandas 的一些知識。雖然你只會略微瞭解 pandas 的功能,但你將學習足夠的知識來利用最常用的 pandas 資料結構,即 dataframe (資料框),以便在你下次處理一塊表格式資料時,能夠有效地利用它。
房間裡的是大象...還說牠是一隻大貓熊? pandas 如何建立「字典中包含字典」結構? 從遵循慣例開始 pandas 資料框清單 從資料框中選取欄位 將資料框轉換為字典,嘗試 #1 從資料框中刪除不需要的資料 反轉你的 pandas 條件運算式 將資料框轉換為字典,嘗試 #2 將資料框轉換為字典,嘗試 #3 這是另一個字典中包含字典的結構 將 gazpacho 與 pandas 進行比較 這只是對 pandas 程式庫可能性的一瞥...
【10 資料庫:井然有序】
遲早,你會需要對應用程式的資料進行管理。當你需要更適當地管理 (manage) 資料時,僅使用 Python 可能不夠。在這種情況下,你需要使用你偏愛的資料庫 (database) 引擎。為了讓事情⋯嗯⋯更容易管理,我們將選擇支援老舊但可靠之 SQL 的資料庫引擎。在本章中,你不僅會建立 (create) 一個資料庫並添加一些資料表 (tables),還會使用由你的 Python 程式碼安排的 SQL 查詢來進行資料庫的插入 (insert)、選擇 (select) 和刪除 (delete) 等操作。
已經聯繫教練... 提前規劃會帶來好處... 任務 #1:決定你的資料庫結構 紙巾結構 + 資料 從 PyPI 安裝 DBcm 模組 開始使用 DBcm 和 SQLite1 DBcm 與「with」陳述式配合使用 使用三引號字串來撰寫你的 SQL 並非所有的 SQL 都會傳回結果 你的資料表已經準備好了 (任務 #1 已完成) 確定游泳選手檔案清單 任務 #2:將資料添加到資料庫的資料表 使用 Python 的 SQL 占位符以確保安全 讓我們針對比賽項目重複這個過程 只剩你的 times 資料表了... 這些時間記錄在游泳選手的檔案中... 資料庫更新工具,1/2 資料庫更新工具,2/2 任務 #2 (終於) 完成了
【11 清單推導式:資料庫整合】
資料庫的資料表已準備就緒,該是整合的時候了。你的 webapp 可以透過使用資料庫 (database) 的資料表 (tables) 中的資料集 (datasets) 來獲得教練所需要的彈性,在本章中,你將建立一個工具程式 (utilities) 模組,讓你的 webapp 可以利用你的資料庫引擎。而且,在追求「用更少程式碼做更多事情」之永無止境的探索中,你將學習如何閱讀和編寫清單推導式 (list comprehensions),這是一種真正的 Python 超能力。你還將以新的有趣方式重複使用許多現有的程式碼,所以讓我們開始吧。還有很多整合工作要做。
讓我們在一個新的筆記本中探索 queries 模組 五列的迴圈程式碼變成一列 非雙底線項目的混搭做法 完成了一項查詢,還剩三項... 完成了兩項查詢,還剩下兩項... 最後一項,但並非最不重要的 (查詢)... 資料庫工具程式碼,1/2 資料庫工具程式碼,2/2 資料庫整合的工作即將開始 該整合你的資料庫程式碼了! 那麼⋯你的模板是怎麼了? 讓我們來顯示一個比賽項目清單... 剩下的工作是繪製長條圖... 檢視最新版的 swimclub.py 程式碼 認識生成 SVG 的 Jinja2 模板 convert_utils 模組 list zip...什麼?! 你已經完成資料庫的整合!
【12 再探部署:收尾...】
你正結束 Python 旅程的起步階段。在本書的最後一章中,你將調整你的 webapp 以使用 MariaDB 作為資料庫後端,而不是 SQLite,然後調整一些內容,以便在 PythonAnywhere 上部署最新版的 webapp。這樣做的話,教練就可以存取一個支援任意數量之游泳選手參加任意數量之游泳訓練課程的系統。本章中沒有太多新的 Python 內容,因為你大部分時間都在調整現有程式碼,以便與 MariaDB 和 PythonAnywhere 協同工作。你的 Python 程式碼從不孤立:它會與其環境和所依賴的系統互動。
遷移到 MariaDB 把教練的資料轉移到 MariaDB 對 schema.sql 進行三處修改 重用你的資料表,2/2 讓我們檢查一下你的資料表是否定義正確 將現有資料複製到 MariaDB 使你的查詢與 MariaDB 相容 你的資料庫工具程式碼也需要修改 在 PythonAnywhere 上建立一個新的資料庫 調整你的資料庫憑證字典 將所有內容複製到雲端 使用最新的程式碼更新你的 webapp 只剩下最後幾個步驟了... 將資料填入你的雲端資料庫中 是時候試用 PythonAnywhere 了 PythonAnywhere 出問題了嗎? 教練超開心的!
【附錄 遺珠:我們沒有介紹的十大主題】
我們堅信,知道何時停止是很重要的。特別是當你的作者來自愛爾蘭 ── 一個以健談、常常不太知道何時該停嘴而聞名的國家。而我們喜歡談論 Python,這個我們最喜歡的程式語言。在這個附錄中,我們列出了前十大我們願意再寫六百頁來詳細介紹的內容,包括類別 (classes)、例外處理 (exception handling)、測試 (testing)、海象運算符 (真的有,海象運算符?是的:海象運算符)、開關 (switches) 陳述式、修飾符 (decorators)、環境管理器 (context managers)、並行性 (concurrency)、類型提示 (type hints)、虛擬環境和程式設計師工具。正如我們所說,總有更多的話題可以談。所以,快翻頁,享受接下來的幾頁內容吧!
1. 類別 2. 例外 3. 測試 4. 海象運算符 5. switch 在哪裡?什麼 switch? 6. 進階語言功能 7. 並行性 8. 類型提示 9. 虛擬環境 10. 工具
【索引】
|
|
|
|
|