《Python 工匠》筆記(三)有關「變數」的程式設計建議

Python 工匠

這是《Python 工匠|案例、技巧與開發實戰》筆記的第 3 篇,你可以把它當作是一則重點整理,加上我個人的開發經驗與心得。

如第一篇所言,這是一本關於「Clean Code in Python」的書。

上一篇我整理書中了第 13 章「有關單元測試的建議」的內容(以及我的看法)。這次我們要再回到一開始,繼續學習如何寫好程式碼。

本文整理自書中的第 1 章第 3 節,為了不過度重複書中內容,下筆點到為止,並加上我自己的理解。

《Python 功力提升的樂趣》心得與總結:給 Python 開發者的 Clean Code 入門指南

Python 功力提升的樂趣

這是「Python 入門三部曲」的最後一篇!歷時 2 年,終於要為這個系列劃下句點。

在此之前,我已寫下 3 篇關於《Python 功力提升的樂趣》的筆記與心得。本文建立在它們之上,但會從更高的俯視角度來介紹與推薦這本書。

從全書的輪廓與定位切入,讓初學者更容易掌握觀念,不至於迷失在細節中。對於已有經驗的 Python 開發者,則可以藉由一篇篇的筆記,直接找到自己感興趣的章節。

所以,本文不會在內容上重複前文,或在細節上多加著墨,而是更多的回顧與比較

這是為什麼我要先寫筆記,最後再完成這篇閱讀心得的原因。

當然,不是每一本書都值得你如此對待。畢竟其中要投入時間精力甚多,這是我第一次——可能也是最後一次,這麼詳細地介紹一本書。

但這本書,我認為值得。

系列:Python 入門三部曲

  1. 《精通 Python 第二版》心得:給入門者的 Python 學習藍圖
  2. 最佳 Python 入門書——《Python 技術者們 - 練功!》心得與導讀
  3. 《Python 功力提升的樂趣》心得與總結:給 Python 開發者的 Clean Code 入門指南

系列:Python 功力提升的樂趣

  1. 《Python 功力提升的樂趣》筆記(一)Black、命名、壞味道
  2. 《Python 功力提升的樂趣》筆記(二)Pythonic、行話、陷阱
  3. 《Python 功力提升的樂趣》筆記(三)函式、註解、docstring
  4. 《Python 功力提升的樂趣》心得與總結:給 Python 開發者的 Clean Code 入門指南

33,Tony Huang 與我的坪林之旅

你聽過 Tony Huang 嗎?

20 年前他就已經開始寫登山健行 blog,最近 5 年改為拍攝 YouTube 影片,成為旅遊 YouTuber。

他的作品特色是,在旅行中融入人文、歷史、文學等元素,讓觀眾不只是看風景,更能了解台灣這塊土地的過去。

我無須介紹太多,而是要聊聊,最近看了許多他的影片的一些感想。

Django REST framework 教學(三)View 函式

Let's Django!

這是 Django Tutorial 的第 9 篇、DRF 系列的第 3 篇。

範例程式碼可參考我的 GitHub 專案,更多教學請見「Django 文章總覽」。

本文相關的程式碼改動,都集中在這個 PR


Views 是 Django 中處理 HTTP 請求的核心邏輯。它的作用是接收請求、處理請求,最後返回 response:

A view function, or view for short, is a Python function that takes a web request and returns a web response.

在 Django 中,我們可以使用兩種方式來撰寫 views:

  1. Function-Based Views(FBV),其實就是一個 Python 函式,也是 Django 預設的 view 寫法,所以又稱 view 函式
  2. Class-Based Views(CBV)。CBV 是 Django 1.3 版本引入的,它是基於類別的 view 寫法。

CBV 與 FBV

CBV vs. FBV」是初學 Django 一個常見的議題。如系列的第一篇所言:

CBV 有著重用程式碼優勢,適合大型專案。而 FBV 則以簡單、直接為賣點,方便快速開發中小型專案。

究竟要選哪個,取決於個人喜好與專案需求。

Django REST framework(以下簡稱 DRF)同時支援這兩種 views。

事實上,DRF 顯然更加鼓勵使用 CBV,不僅提供了許多現成的 generic views,它的很多元件也是基於 CBV 設計的。

不過,本文只打算介紹 DRF 中的 FBV,並實作一個 DRF view function。

Python type checker:Mypy 介紹

在〈《強健的 Python》筆記(一)Type Hints 的成本與挑戰〉一文中,我們闡述了為 Python 專案程式碼加上 type hints 的長期價值需要付出的成本

文中多次提到了 Mypy 這個靜態類型檢查器

本文從歷史發展、工作原理與工具的整體輪廓上介紹 Mypy 的特色,

雖然沒有詳細的 Mypy 使用教學,但更了解 Mypy,可能讓你對 Python 的型別檢查產生不同的看法。

老實說,我覺得 Mypy 不太需要學習,只要引入一些設定就好。這部分我們會在下一篇文章中介紹。

最後,我會分享一些使用 Mypy 時的心得與經驗。

如果看過開頭那篇文章,你可能會認同:我們終將要成為 Python type hints 的信徒。而 Mypy 就是最佳的布道者。


為什麼需要 Mypy

Python 是一門廣受歡迎的「動態定型」程式語言,以其簡潔的語法和靈活性著稱。

然而,這種靈活性有時也會成為問題,特別是在大型專案中,型別錯誤可能會導致難以追蹤的 bug,從而降低程式碼的可靠性和可維護性。

在這樣的背景下,Mypy 應運而生。

32,下半年寫作目標

在〈現代軟體的「鍵盤快捷鍵」記憶爭奪戰〉一文的留言中,有讀者提到我最近似乎變多產了。

確實如此。

有人注意到這件事,讓我非常高興XD,甚至可以說感動。

而本文斗膽預告:下半年將會比上半年,更加多產🔥


我通常不太想為自己立 flag,預告也屬於此類。尤其有〈24,收回「發文計畫」〉的前車之鑑,心裡難免會暗暗擔憂:「是不是說出來就會更容易失敗?」

當然,我知道實際並非如此——很多事做不做,成不成,終究還是操之在己。

至少寫作是這樣的。

三個寫作方向

這篇來聊聊我今年下半年的寫作目標,主要有三大方向

看完這三個方向,想必你就能理解,為何說一定會比上半年更多產。

換言之,如果真的都能達成,多產只是必然的結果。

Django ORM:一對一、一對多外鍵教學(下)關聯查詢

Let's Django!

這是 Django Tutorial 的第 8 篇、Django ORM 外鍵教學的第 3 篇——完結篇。

範例程式碼可參考我的 GitHub 專案,更多教學請見「Django 文章總覽」。

系列:Django ORM 外鍵教學

  1. Django ORM:一對一、一對多外鍵教學(上)前言與關聯設定
  2. Django ORM:一對一、一對多外鍵教學(中)反向關聯
  3. Django ORM:一對一、一對多外鍵教學(下)關聯查詢

經過前 2 篇的鋪墊,我們可以真正開始感受,使用 ORM 來查詢 db 關聯物件的方便與直觀之美。

開始前,我們要先匯入範例資料,方式請參考〈用 Django Fixture 匯入與導出資料〉介紹的 Django fixture 與資料內容。

打開範例專案,cd 至專案根目錄,並使用指令:

1
python manage.py loaddata post_data.json

好,現在我們的 db 已經有資料了。

如果你已經不記得具體有哪些 table、它們代表什麼,可參考第一篇的模型介紹,以及第二篇對模型架構的調整,或直接觀看 models.py 原始碼。

本文主旨

本文只專注介紹 Django ORM 中的外鍵關聯查詢

畢竟 Django ORM 的查詢語法實在太多了,很多時候都要回去看文件。

而其中關聯查詢特別常用,值得我們專門學習,熟練掌握。