從第一行 print("Hello, World!") 開始,
認識 Python 與其他語言(尤其 JavaScript)的根本差異、它的獨特之處,
以及為什麼全世界的 AI 工程師都選擇用它。
同樣是印出「Hello, World!」,Python 和 JavaScript 寫起來差很多。 Python 的目標是讓程式碼看起來像英文句子,直接、乾淨、沒有多餘的符號。
print("Hello, World!")
console.log("Hello, World!");
Python 結尾沒有分號 ;,函式名稱也比較短(print vs console.log)。
這只是冰山一角。Python 整體的設計哲學就是:少寫一點符號,多表達一點意思。
這是 Python 最讓初學者驚訝的事情:其他語言用 { } 大括號決定程式的「區塊」,
但 Python 用縮排。空白變成了語法的一部分。
def greet(name):
if name == "Akira":
print("歡迎回來!")
else:
print("你好,陌生人")
greet("Akira")
function greet(name) {
if (name === "Akira") {
console.log("歡迎回來!");
} else {
console.log("你好,陌生人");
}
}
greet("Akira");
每一層縮排就是一個「巢狀層級」,Python 強迫你把程式排得整齊。
「程式碼被讀的次數,遠多於被寫的次數。」 — Guido van Rossum
強制縮排確保了任何 Python 程式碼,不管誰寫,長相都差不多整齊。
Python 不只少了 { } 和 ;。它在很多地方都做了「讓你寫得更少」的設計。
區塊用縮排表示,沒有 { } 包圍。少打兩個字,而且永遠不會忘記關。
一行就是一行,換行就結束了。JavaScript 雖然分號可省,但容易踩坑;Python 直接沒這問題。
直接 x = 10,Python 自己判斷它是整數。不需要寫 let、const 或 int。
像 if name in list、for x in items,直接像英文一樣讀,初學者很快上手。
List、Dict、Tuple、Set 都是內建型別,寫法簡潔到讓人感動。
一行寫完 for 迴圈 + 條件 + 收集結果。寫熟之後回不去 JavaScript 了。
想做出「1 到 10 中所有偶數的平方」這份清單。
# 一行解決
result = [x**2 for x in range(1, 11) if x % 2 == 0]
print(result)
# [4, 16, 36, 64, 100]
// 要用 filter + map
const result = [...Array(10).keys()]
.map(x => x + 1)
.filter(x => x % 2 === 0)
.map(x => x ** 2);
console.log(result);
Python 變成 AI 主流語言不是因為它「跑得快」(其實它跑得很慢)。 而是因為一連串歷史和生態的累積。
研究員寫論文裡的演算法,翻譯成 Python 幾乎是「直譯」。不用花心思在語言本身,專注在演算法。
2006 年 NumPy 統一了 Python 的數值運算介面,後面所有的 AI 套件都建立在它之上,形成滾雪球效應。
Python 慢沒關係,真正吃效能的部分(矩陣運算、CUDA 核心)都是 C/C++ 寫的,Python 只是膠水。
Google、Meta、OpenAI 的 AI 框架(TensorFlow、PyTorch)都以 Python 為主要 API,沒人想改。
能一邊寫程式、一邊看圖、一邊寫筆記,對研究人員來說等於做實驗的紙筆。其他語言沒這待遇。
大模型時代的新工具鏈,幾乎都以 Python 為主語言。生態繼續滾大,後進者已經追不上。
前面講了六個原因,但其中三個是真正讓 Python 在 AI 時代站穩腳跟的關鍵。 這三點互相牽動,缺一不可。
做 AI、做金融、做科學運算,最怕的就是數字算到一半「悄悄失準」。 Python 在整數運算和精確小數上,都比 JavaScript 強得多。
# 整數想多大就多大,不會 overflow
>>> 2 ** 100
1267650600228229401496703205376
# 階乘 100!也沒問題
>>> import math
>>> math.factorial(100)
933262154439441526816992388... # 158 位數
// Number 是 64-bit float,大整數會失精
> 2 ** 100
1.2676506002282294e+30 // ❌ 已經失準
// 必須換成 BigInt(後來才加的)
> 2n ** 100n
1267650600228229401496703205376n
// BigInt 還不能跟一般 Number 直接運算
0.1 + 0.2 ≠ 0.3 是 IEEE 754 浮點數的問題,Python 跟 JavaScript 都有。
但 Python 內建了 Decimal 和 Fraction 模組,可以做完全精確的運算。
# 一般 float — 兩種語言都會踩雷
>>> 0.1 + 0.2
0.30000000000000004
# Python 解法 1:Decimal(精確小數)
>>> from decimal import Decimal
>>> Decimal("0.1") + Decimal("0.2")
Decimal('0.3') # ✓ 完全精確,適合金融計算
# Python 解法 2:Fraction(分數運算)
>>> from fractions import Fraction
>>> Fraction(1, 3) + Fraction(1, 6)
Fraction(1, 2) # ✓ 1/3 + 1/6 = 1/2,完美
訓練神經網路時,梯度可能小到 1e-8,模型權重又可能大到 1e+6。
如果語言的數值系統本身就不穩,訓練到一半就會「NaN 大爆發」。
Python 加上 NumPy 提供了完整的 float16 / float32 / float64 / bfloat16 控制,
這是 JavaScript 做不到的。
Python 本身執行速度其實很慢,大概比 C++ 慢 50 倍以上。 那為什麼還能拿來訓練神經網路?因為真正吃效能的部分,根本不是 Python 在跑。 Python 只是一層「膠水」,把底層的 C/C++/CUDA 模組黏起來。
實際情況是這樣的:
你呼叫 numpy.dot(A, B) 做矩陣相乘 ——
Python 只負責「轉達」這個請求。
真正的乘法是底下的 BLAS(Fortran/C 寫的)在跑, 速度跟你直接寫 C 幾乎一樣。
所以你用最舒服的 Python 寫法, 享受的是 C 的執行速度。 兩個世界的好處都拿到了。
AI 研究最重要的是「快速實驗不同想法」。Python 雖然執行速度比 C++ 慢, 但開發速度快非常多。而且核心運算 heavy 的部分, 底層其實是用 C/C++ 實作的(NumPy、PyTorch 都是)。
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
# 4 行,跑完了。
// 自己實作矩陣運算
Matrix transpose(const Matrix& A) { ... }
Matrix multiply(const Matrix& A, const Matrix& B) { ... }
Matrix inverse(const Matrix& A) { ... }
// 自己實作梯度下降
void gradientDescent(...) {
for (int i = 0; i < iterations; ++i) { ... }
}
// 還要實作資料前處理、loss function、...
// 上千行起跳
Python 讓你專注在「怎麼解決問題」,而不是「怎麼實作演算法」。
對 AI 研究員、資料科學家來說,
一天試 10 個想法 vs 一個月寫一份 C++ 程式,選哪個很明顯。
而且 — 別忘了 — sklearn 底下還是 C 在跑。
所以你獲得的是「4 行 Python 程式碼的開發體驗 + C 等級的執行速度」。
這些套件構成了 Python 在 AI 領域的完整生態。 按用途分成七大類,每個套件都標明「用在哪裡」。
fit() / predict() 一致到讓人感動。
from_pretrained() 一行就能用最新模型,LLM 時代的軍火庫。
新手建議路線:
先學 numpy + pandas + matplotlib 處理資料,
然後 scikit-learn 入門 ML,
接著 pytorch 進入深度學習,
最後 transformers / langchain 玩 LLM。
安裝統一用 pip install 套件名,
或在 conda 環境裡用 conda install。
Python 的資料處理寫起來幾乎像在說話。這就是為什麼 AI / 資料科學的人捨不得換語言。
import pandas as pd
df = pd.read_csv("sales.csv")
avg = df["revenue"].mean()
print(f"平均營收:{avg:.2f}")
const fs = require("fs");
const rows = fs.readFileSync("sales.csv", "utf8")
.split("\n").slice(1)
.map(r => parseFloat(r.split(",")[2]))
.filter(n => !isNaN(n));
const avg = rows.reduce((a,b) => a+b) / rows.length;
console.log(`平均營收:${avg.toFixed(2)}`);
Python 只要 4 行,而且讀起來像「打開 CSV → 取 revenue 欄 → 算平均」。 JavaScript 要自己處理字串切割、parseFloat、過濾無效值。 差別不在語言能力,而在生態系成熟度。
縮排是 Python 的優點,也是初學者最容易翻車的地方。以下是 5 個經典錯誤,請務必認識它們。
def greet(name):
print("Hi, " + name) # ❌ 沒縮排!
IndentationError: expected an indented blockdef greet(name):
print("Hi, " + name) # ✓
def calc(x):
if x > 0:
→ print("正數") # ❌ 上面用空格,這行用 Tab
else:
print("非正數")
TabError: inconsistent use of tabs and spaces in indentationdef check(score):
if score >= 60:
print("及格")
print("恭喜") # ❌ 縮排 6 格,跟上面 8 格不同
IndentationError: unindent does not match any outer indentation levelif score >= 60 # ❌ 漏掉冒號
print("及格")
SyntaxError: expected ':'if、for、while、def、class、else)
結尾都要加冒號 :。這跟 JavaScript 的 if () { } 不一樣,JS 沒有冒號。
if score = 100: # ❌ 賦值,不是比較
print("滿分")
SyntaxError: invalid syntax= 是「把 100 放進 score」,== 才是「比較 score 是不是等於 100」。
JavaScript 還有 ===(嚴格相等),Python 只用 == 就夠了。
names = {"Akira", "Yuki", "Hiro"} # ❌ 這變成 set,不是 list
print(names[0]) # TypeError: 'set' object is not subscriptable
{ },但 Python 的 { } 是 set 或 dict。
要做有順序的清單(List),要用 [ ]。記住:
[ ] → List(有順序) ·
{ } → Set / Dict(無順序 / 鍵值對) ·
( ) → Tuple(不可變)
這些錯誤幾乎每個 Python 學習者都犯過。 建議使用 VS Code + Pylance 擴充套件,它會在你打錯字的當下就標紅線,而且 把 Tab 設成自動轉 4 空格,可以避免 80% 的縮排錯誤。
Python 的設計哲學寫在它自己的彩蛋裡:打開 Python,輸入 import this,
會看到「The Zen of Python」 — Python 之禪。
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Readability counts.
— Tim Peters, The Zen of Python