# 🐍 Python 彎路終結者 ![Python](https://memeprod.sgp1.digitaloceanspaces.com/user-wtf/1586272545709.jpg) ## x. 刷題 ### 📚 學習資源 - **zerojudge** - [**問題集**](https://zerojudge.tw/Problems) - [**部分解答**](https://steam.oxxostudio.tw/category/python/zerojudge/about.html) ## 1. Python 基礎 ### 🔎 目標 理解 Python 的基本語法與常見內建功能。 ### 📌 學習內容 - 了解 Python 的運作方式與環境安裝 - 變數、資料型態(數字 `int` 、字串 `str`、列表 `list`、字典 `dict`、集合 `set` ...) - 條件判斷(`if-else`)、迴圈(`for`, `while`) - 內建函式與常見操作(`range()`, `zip()`, `enumerate()`, `len()`) - 例外處理(`try-except-else-finally`) ### 📚 學習資源 - 📗 **橙式學院** - [**練習課程**](https://mandarinbits.com/zh/) - 📗 **良葛格** - [**Python :: 起步走**](https://openhome.cc/zh-tw/python/basics/) - 注意:[**簡介模組**](https://openhome.cc/zh-tw/python/basics/module/)可以等到 [Python 物件導向]再回頭看。 - [**Python :: 內建型態**](https://openhome.cc/zh-tw/python/built-in-types/) - [**Python :: 基本運算**](https://openhome.cc/zh-tw/python/math-abc/) - [**Python :: 流程語法**](https://openhome.cc/zh-tw/python/flow-control/) - 重要:[**for-comprehension**](https://openhome.cc/zh-tw/python/flow-control/for-comprehension/) - 📗 **ChatGPT** - [**Python 函式、方法、類別大全**](https://chatgpt.com/)(試試看這樣問 ChatGPT) - `請幫我整理出 Python 3.12 中類別 list 的所有方法` - `請幫我整理出 Python 3.12 中所有內建類別(如 int, float 等等)` - `請幫我整理出 Python 3.12 中所有內建函式(不含內建類別如 int, float 等等)` ## 2. Python 函式 ### 🔎 目標 學習函式、列表推導式(list comprehension)、檔案操作,讓程式碼更具結構化與可讀性。 ### 📌 學習內容 - 函式(定義函式 `def`、參數 `*args` / `**kwargs`) - Lambda 表達式(`lambda x: x*x`) - 函式式程式設計(`map`, `filter`) - 列表推導式(`[i*i for i in range(1, 5)]`) - 檔案讀寫(`open()`, `with`) ### 📚 學習資源 - 📗 **良葛格** - [**Python :: 流程語法**](https://openhome.cc/zh-tw/python/flow-control/) - 重要:[**for-comprehension**](https://openhome.cc/zh-tw/python/flow-control/for-comprehension/)(列表推導式) - [**Python :: 函式入門**](https://openhome.cc/zh-tw/python/function/) - 注意:[**yield**](https://openhome.cc/zh-tw/python/function/yield/#google_vignette)(generator)可以等到 [Python 物件導向]再回頭看。 - 📗 **IT 邦** - [**Python 檔案操作**](https://ithelp.ithome.com.tw/articles/10347344)(打開、讀取、寫入檔案) ## 3. Python 物件導向 ### 🔎 目標 理解為何要將邏輯抽象成「物件」,以及物件的老爸們「類別」的真正來歷。 ### 📌 學習內容 - 類別 `class`、物件 `self`、建構子 `__init__` - 方法(method) - 封裝(為什麼不要讓物件內部所有東西,都能讓外面看光光?) - 繼承(方法的重複利用!) - 好的設計應該要基於抽象,而非基於具體 - 粒度要足夠細,才能像堆積木一樣,堆出各種作品 - 粒度又不能太細,要保留足夠的抽象(積木的形狀要出來),要不然就是一盤散沙 ### 📚 學習資源 - 📗 **良葛格** - [**Python :: 封裝**](https://openhome.cc/zh-tw/python/encapsulation/) - `@property` 建議理解用法就好(原理與 meta-programming 相關) - [**Python :: 繼承**](https://openhome.cc/zh-tw/python/inheritance/) - [**Python :: meta-programming**](https://openhome.cc/zh-tw/python/meta-programming/) <mark>先不用學</mark>(對新手不友善) - 很少人會學到這部分,但這是邁向「真正精通」 Python 的門檻 ## 4. Python 模組 ### 🔎 目標 學習利用模組,讓自己的程式能夠模組化。 <mark>函式就像工具</mark>,可能有片幾(鉗子)、踏普(螺絲攻)、羅賴把(螺絲起子)、A呀練幾(氣動板手)?\ <mark>模組就像是工具箱</mark>,它負責將「功能類似」的函式「整理」成一箱,供外部使用。 ### 📌 學習內容 - 自訂模組 - 內建模組(`os`, `sys`, `random`, `datetime`, ...) - 如何 `import` 模組 ### 📚 學習資源 - **良葛格** - 📗 [**Python :: 起步走 - 簡介模組**](https://openhome.cc/zh-tw/python/basics/module/) - 📗 [**Python :: 模組**](https://openhome.cc/zh-tw/python/module-package/) ## 5. Python 套件管理 ### 🔎 目標 學習白嫖別人現成的套件,不用什麼東西都要自己從零開始(building it from scratch)。 當很多模組兜在一塊時,就會組成一個套件。\ Python 之所以強大,其中一個關鍵點就是豐富的第三方套件(別人寫的),\ 你幾乎可以找到任何功能的<mark>現成工具</mark>來使用,\ <mark>而不必自己「重造輪子」</mark>(reinventing the wheel)。 ### 📌 學習內容 - 套件管理工具:`pip` - 套件的安裝、解除安裝、`requirements.txt` 的輸出 - 套件菜單:`requirements.txt` - 你的程式就像一道菜,若詳細記錄它的原材料(用到的套件,即依賴套件)有哪些,就能在任何廚房(不同電腦)去煮這道菜(安裝依賴套件並執行) - 虛擬環境建立工具:`virtualenv`(<mark>要學,不然你的同事會恨你</mark>) - 蛤...為什麼我要虛擬環境?全域環境安裝不就好了嗎? - 某一天,你手上有很多專案,每個專案都用到了各式各樣的套件 - 若你選擇把每個專案的所有依賴套件通通全域環境安裝,就有很高機率遇到套件版本的衝突(嗯?什麼意思?來,詳細舉個例子給你聽) - 套件版本的衝突(全域環境安裝) 1. 今天你的專案一號,它需要套件 A,於是你安裝了套件 A 版本 `1.7`。 2. 今天你的專案一號,它需要套件 B。 3. 套件 B 指定套件 A 版本 `>=1.5,<2.0`,因為它用到了這版的套件 A 裡的某些功能。 4. 太好了,你本來就有套件 A,而且還符合版本需求。於是你可以安心安裝套件 B 5. 今天你的專案二號,它需要套件 C。 7. 套件 C 指定套件 A 版本 `>=2.0`,因為它用到了這版的套件 A 裡的某些功能。 8. 套件 C 和套件 B 的<mark>依賴衝突</mark>了(找不到一個合理的套件 A 版本,讓 B 和 C 能共存)! - 嗯...那有沒有什麼方法,可以讓專案一號和專案二號有「各自的環境」阿... - 比如說,專案一號裡面的環境只裝套件 B 和套件 A `1.7` - 比如說,專案二號裡面的環境只裝套件 C 和套件 A `2.1` - 這樣 B 和 C 就不會打架了! - 大聰明,你要的就是<mark>虛擬環境</mark>啊! - 很多文章對於虛擬環境的解釋過於籠統或艱澀,不易新手理解,因而特此說明 - 現在你知道為什麼要學虛擬環境了 ### 📚 學習資源 - 📗 **Max行銷誌** - [**【Python 教學】pip install 指令大全**](https://www.maxlist.xyz/2019/07/13/pip-install-python/) - 📗 **Medium** - [**Python 的 Virtualenv 虛擬環境安裝與使用**](https://medium.com/ai-for-k12/python-%E7%9A%84-virtualenv-%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83%E5%AE%89%E8%A3%9D%E8%88%87%E4%BD%BF%E7%94%A8-8645f5884aac) ### 📦 經典套件 紀錄那些超紅超夯的第三方套件,身為一個 🐍 開發者,聽到一定要跳起來。 #### 數據分析 - `numpy`:數值運算,提供高效的多維陣列處理。 - `pandas`:數據處理與分析,擅長處理表格數據(DataFrame)。 - `scipy`:科學計算,包含線性代數、積分、統計等功能。 #### 機器學習 - `scikit-learn`:經典機器學習演算法 - `tensorflow` / `keras`:深度學習框架,適用於神經網路模型訓練。 - `pytorch`:靈活且適合研究的深度學習框架。 #### 資料視覺化 - `matplotlib`:最基本的繪圖工具,提供 2D / 3D 圖表。 - `seaborn`:基於 matplotlib,提供更高級的統計視覺化。 #### 網站開發 - `flask`:輕量級 Web 框架,適合小型應用。 - `django`:全功能 Web 框架,內建 ORM、認證等功能。 #### 爬蟲 - `requests`:簡單好用的 HTTP 請求函式庫。 - `beautifulsoup4`:解析 HTML/XML,適合網頁爬取。 #### 自動化 - `pyautogui`:模擬鍵盤滑鼠操作。 - `selenium`:自動化瀏覽器操作,適用於爬蟲與測試。 #### 影像處理 + `opencv-python`:電腦視覺處理,支援影像識別與特徵提取。 + `pillow`:圖片處理,支援格式轉換、縮放等。 + `pytesseract`:OCR 文字辨識。 #### 資料庫 + `pymysql`:連接 MySQL 資料庫。 + `psycopg2`:連接 PostgreSQL 資料庫。 + `sqlalchemy`:ORM 框架。 ## 6. 里程碑 ### 🎆 讚哦 建議到這就可以開始<mark>你的第一個專案</mark>了! ### 📚 學習資源 - 📗 **steam 學習網** - [**Python 範例集錦**](https://steam.oxxostudio.tw/category/python/info/example.html) [刷題]: #x-刷題 [Python 基礎]: #1-Python-基礎 [Python 函式]: #2-Python-函式 [Python 物件導向]: #3-Python-物件導向 [Python 模組]: #4-Python-模組 [Python 套件管理]: #5-Python-套件管理 [里程碑]: #6-里程碑