變數與物件
變數與物件
學習目標
- 理解變數在程式設計中的角色。
- 學會 Python 中變數的宣告、指派與使用方式。
- 掌握變數的命名規則與最佳實踐 (Best Practices)。
- 建立一個核心觀念:Python 中「萬物皆物件」。
- 區分「可變物件」與「不可變物件」的差異。
第 1 章:什麼是變數 (Variable)?
在程式設計中,變數可以想像成一個「貼在箱子上的標籤」,我們用它來辨識箱子,方便存取箱子中的內容。「箱子」就是記憶體;「標籤」就是變數,而記憶體裡放的內容就是資料(值)。
透過變數,我們可以:
- 儲存資料:將計算結果、使用者輸入、文字等資訊暫時存放在記憶體中。
- 重複使用:為記憶體取一個的名字,方便在程式的不同地方重複取用。
- 方便維護:當需要修改某個值時,只需透過變數修改記憶體中的值,所有使用到該變數的地方都會自動更新。
簡單來說,變數就是一個指向特定記憶體空間的「名稱」。
第 2 章:變數的宣告與指派 (Declaration & Assignment)
Python 與許多其他程式語言(如 C++ 或 Java)不同,它採用動態型別 (Dynamic Typing)。這意味著你不需要在建立變數時預先宣告它的資料型態。變數的型態會在第一次被賦值時自動決定。
2.1 指派運算符號 =
在 Python 中,我們使用單一個等號 = 作為指派運算符號 (Assignment Operator)。它的作用是將等號右邊的值,指派給等號左邊的變數。
語法結構:
變數名稱 = 值
範例:
# 宣告一個名為 'student_name' 的變數,並指派字串 "陳同學" 給它
student_name = "陳同學"
# 宣告一個名為 'student_age' 的變數,並指派整數 20 給它
student_age = 20
# 宣告一個名為 'gpa' 的變數,並指派浮點數 3.8 給它
gpa = 3.8
# 宣告一個名為 'is_passed' 的變數,並指派布林值 True 給它
is_passed = True
在上面的例子中,student_name 的型態是字串 (str),student_age 的型態是整數 (int),gpa 的型態是浮點數 (float),is_passed 的型態是布林值 (bool)。這一切都是 Python 直譯器自動判斷的。
2.2 多數指派 (Multiple Assignment)
Python 提供了非常便利的多重賦值語法。
1. 將同一個值指派給多個變數。
x = y = z = 100
print(x) # 輸出: 100
print(y) # 輸出: 100
print(z) # 輸出: 100
2. 將不同的值同時指派給多個變數。
name, age, city = "王小明", 25, "高雄"
print(name) # 輸出: 王小明
print(age) # 輸出: 25
print(city) # 輸出: 高雄
第 3 章:變數的命名規則與風格
為變數取一個好名字至關重要,它能大大提升程式碼的可讀性。
3.1 規則 (必須遵守,否則會語法錯誤)
- 只能包含英文字母 (
a-z,A-Z)、數字 (0-9) 和底線 (_)。 - 開頭不能是數字。
- 不能使用 Python 的關鍵字 (Keywords),例如
if,for,class,def等。 - 變數名稱有大小寫之分 (
myVar和myvar是兩個不同的變數)。
如何查看所有關鍵字?
import keyword print(keyword.kwlist)
3.2 原則 (PEP 8 規範,讓程式碼更專業)
- 使用蛇式命名法 (Snake Case):所有字母小寫,單字之間用底線
_連接。這是 Python 社群最廣為接受的風格。 - 名稱應具描述性:使用有意義的單字,讓其他人(或未來的你)能輕易看懂變數的用途。
- 避免使用單一字母:除非是簡單的迴圈計數器(如
i,j,k),否則應避免使用a,b,x這種無意義的名稱。
| 不好的命名 | 好的命名 (Snake Case) | |
|---|---|---|
| 風格 | studentname |
student_name |
| 描述性 | s, n, val |
user_input, total_price |
| 清晰度 | l (容易看成數字1) |
name_list |
第 4 章:核心觀念 - Python 的純物件環境
這是理解 Python 運作模式最關鍵的一步。在 Python 的世界裡,萬物皆物件 (Everything is an object)。
這句話是什麼意思?意思是,你所建立的每一個值,無論是一個數字 10、一個字串 "Hello",在 Python 都是一個「物件」。
4.1 變數不是箱子,是標籤
前面我們用「貼在箱子上的標籤」來比喻變數。記憶體空間就是那個箱子,箱子中的資料就是物件。
- 物件 (Object):是真實存在於記憶體中的資料實體。例如,數字
100是一個型態為 int 的物件。 - 變數 (Variable):只是一個名稱(標籤),它指向 (point to) 某個物件。
4.2 id() 函式:查看物件的記憶體位址
id() 函式可以取得一個物件在記憶體中的唯一識別碼(通常是它的記憶體位址)。這證明:「變數是指向物件的名稱」。
4.3 不可變物件 (Immutable) vs 可變物件 (Mutable)
這個「物件」觀念引申出一個非常重要的分類:
1. 不可變物件 (Immutable Objects)
- 定義:一旦被創造,其內部的值就不能被改變。
- 常見類型:
int(整數),float(浮點數),str(字串),bool(布林),tuple。 - 行為:任何對這類變數的操作,看起來像在「修改」,實際上都是創建一個新物件,然後將變數名稱指向這個新物件。
2. 可變物件 (Mutable Objects)
- 定義:被創造之後,其內部的內容可以被修改,而物件本身的記憶體位址 (
id) 不變。 - 常見類型:
list,dict,set。 - 行為:對這類變數的操作,是「原地修改 (in-place modification)」。
理解可變與不可變物件的區別,對於避免在處理函式參數和複雜資料結構時產生非預期的錯誤至關重要。



留言
張貼留言