為你自己學 Python

為你自己學 Python
TL;DR, 先說結論:
這是我最近寫的書「為你自己學 Python」,實體書 & 電子書正在編輯中,網站上的內容除另有標示外,將會以 CC BY-NC-SA 4.0 方式授權予公眾自由取用。
希望對想要學習 Python 程式語言的朋友有些幫助 :)

為你自己學 Python
TL;DR, 先說結論:
這是我最近寫的書「為你自己學 Python」,實體書 & 電子書正在編輯中,網站上的內容除另有標示外,將會以 CC BY-NC-SA 4.0 方式授權予公眾自由取用。
希望對想要學習 Python 程式語言的朋友有些幫助 :)

有沒有想過為什麼我們學的數學是從 1 開始算,但好像大部份比較主流的程式語言的陣列包括 Python 的串列,索引值卻是從 0 開始的?因為這是因為陣列的索引值並不是指向元素本身,比較像是記憶體位置的「偏移量」。
假設有一個陣列像這樣:
chars = ['a', 'b', 'c', 'd']
當我們說「變數 chars 指向 ['a', 'b', 'c', 'd'] 陣列」的時候,並不是 chars 這個變數直接指向這一整個陣列,而是 chars 變數指向這個陣列的「起始位置」,更精準的說是記憶體位置。陣列在記憶體裡的位置跟門牌號碼一樣都是連號的,假設這個陣列的起始記憶體位置是 1450,然後每個元素所佔的位置或說格子的大小我就先隨便假設是 8(先不管單位跟以及為什麼是 8)。大概示意圖如下:

這樣的話,你認為要怎麼取得第一個元素的 a 字元?不就是指向 1450 的位置就拿到了嗎?(你也可以說是從 1450 到 1458 這一塊空間)。
我們現在知道怎麼拿第一個元素了,接著要怎麼拿第二個?其實只要知道第一個元素的位置再搭配簡單的數學加法跟乘法就能算出來了:
起始位置 + (1 x 8) = 1458
同理可證,第三個、第四個直到第 N 個元素就能推導出計算公式:
起始位置 + (N x 8)
到這裡,大家有看出來上面公式裡的 N,剛好就是等於我們平常在講的索引值嗎?所以索引值其實就是記憶體位置的「偏移量」,因此才會從 0 開始算。
所以陣列索引值從 0 開始的概念從滿早期的程式語言開始就有了,大家用著用著也習慣了,Python 以及其它程式語言也都受到影響,所以 Python 的串列索引值也跟是從 0 開始算。
事實上,也不是所有程式語言的索引值都是從 0 開始算的,不同的程式語言對這件事有不同的觀點,像程式語言 Lua、Fortran、COBOL、Julia 跟 R 語言等都是從 1 開始算的,也許在他們的觀點來看,chars[1] 就是第一個或第一欄,看起來更簡單、直覺。

Python 裡的 F 字串(F-String)不只是可以直接把變數塞到字串裡、看起來更好看、更好寫而已,它還有一些有趣的用法,像是我們常會遇到需要幫錢錢加上千位數字的逗點,在其它程式語言可能需要透過其它函數或是另外自己寫函數來處理,用 F 字串可以輕鬆做到這件事,例如:

許多程式語言會使用 2 個等號 == 比較兩個值是否相等,在 Python 也是一樣,但 Python 還有個特別的比較方法 is,它可以用來比較這兩個值是不是同一個物件:

假設你曾經寫過其它的程式語言,遇到這種一大串的 else if 組合的時候,通常會想到的是 switch 或 case...when 之類的語法。在 Python 並沒有這樣的設計,真的遇到一堆判斷就是用 if...elif...else... 寫就是了。這樣的設計是因為 Python 的作者認為 switch 語法並不是那麼的必要,而且 if...elif...else... 也可以達到相同的效果,所以就沒有加入 switch 語法。沒有 switch 或 case 的設計並沒什麼大不了的,事實上有些程式語言就算有 switch 或 case 的寫法,本質上也只是 if..else 而已。

這是在 Vue.js Taiwan 社群小聚分享的主題「你是 Live Reload,我是 Hot Reload,我們不一樣!」,用一個簡單的 Vanilla JS 專案示範平常在用的 Live Server 所提供的頁面自動重新整理,跟 Vite 裡面的 HMR(Hot Module Replacement)有什麼不同,希望對大家有些幫助。
但我必須老實說,今天這個主題是我在今年 LaravelxVue Conf 研討會上講錯的內容,當時我以為我看到的是 HMR,但後來細追原始碼才發現原來不是這麼一回事。
想要跟著影片自己動手做看看的話,可以到我的 GitHub 取得檔案
Repo:https://github.com/kaochenlong/vite-hmr-demo
場地錄影畫質只有 1080p 所以可能有些程式碼不一定會那麼清楚 :)
想要了解更多關於 Vite 的原始碼或運作原理的話,可參考Vite 原始碼解讀的介紹。

今年的 iTHome 鐵人賽我挑選的主題之一,是應該沒辦法用來開課賺錢的「Vite 原始碼解讀」。
選擇這個題目的原因是今年八月份我在 {LaravelxVue} Conf 研討會上分享的主題「被 Vue 框架所耽誤的建置工具:Vite」,可惜只有短短的 40 分鐘的時間,沒辦法介紹太細節的內容。所以我決定在這次鐵人賽活動,30 天分期付款地慢慢跟大家一起研究 Vite 的原始碼,看看能不能發現什麼有趣的東西。

在前篇文章我跟大家介紹了 senior 工程師的共通特質以及 junior 工程師的自我修練的建議,希望對大家有些幫助。
但如果你不是軟體工程師,可能不知道在哪裡看到招生廣告點進來的,或是剛好正在考慮想要轉職軟體工程師的話,有一些過去以及我們自己帶學生的經驗可供你參考。
同樣,如果懶的看文字,也可以看影片配雞排: