【簡介】把你的心思放在 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 和 SQLite1DBcm 與「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. 工具【索引】
深入淺出C# 第五版|使用C#與.NET來建構實際的程式 Think Python|學習程式設計的思考概念 第三版 Python極客實驗室 |程式設計師的奇想計畫 第二版