Python 採「一切皆物件」設計,變數無需宣告型別,但理解底層資料模型對撰寫高效、無 Bug 程式碼至關重要。本文系統整理內建型別分類、操作方法、編碼處理與常見坑點。
int / 長整數 longint,無大小限制(受限於記憶體)。2**31-1 為 int 上限,超過自動轉 long(尾碼 L)。sys.maxsize 取得平台最大整數(通常 2**63-1)。floatdecimal.Decimal 避免二進位誤差。complexz = 3 + 4j print(z.real, z.imag, abs(z)) # 3.0 4.0 5.0
str / bytes 與編碼s1 = 'hello' s2 = "hello" s3 = '''多行 字串'''
str:Unicode 字串,內部為代碼點序列。bytes:位元組序列,適用網路傳輸、檔案 I/O。str.encode('utf-8') → bytes,bytes.decode('utf-8') → str。# -*- coding: utf-8 -*-。u''(Python 2 必須,Python 3 可省略)。open(..., encoding='utf-8')(Py3)或 codecs.open(..., encoding='utf-8')(Py2)。# ANSI 編碼檔案含中文,在 UTF-8 終端印出
with open('test.txt', 'rb') as f:
content = f.read()
try:
print(content.decode('utf-8'))
except UnicodeDecodeError:
print(content.decode('gbk').encode('utf-8')) # 轉碼輸出
| 型別 | 可變性 | 有序性 | 典型用途 |
|---|---|---|---|
list | 可變 | 有序 | 動態陣列、堆疊、佇列 |
tuple | 不可變 | 有序 | 固定結構記錄、字典鍵 |
dict | 可變 | 無序 (Py3.7+ 保留插入序) | 鍵值對映射、快速查找 |
set | 可變 | 無序 | 去重、集合運算 |
list 核心操作lst = [1, 2, 3] lst.append(4) # 尾端新增 lst.extend([5, 6]) # 批次新增 lst.insert(0, 0) # 指定位置插入 lst.pop() # 彈出尾端 lst.pop(0) # 彈出首端 (O(n)) lst.remove(2) # 移除首個值為 2 lst.index(3) # 查找索引 lst.count(1) # 計數 lst.reverse() # 原地反轉 lst.sort(key=len) # 原地排序 lst[:] # 淺複製 lst[::2] # 切片步長
dict 進階用法d = {'name': 'Alice', 'age': 30}
d.setdefault('city', 'Taipei') # 鍵不存在才設定
d.get('missing', 'N/A') # 安全取值
{k: v for k, v in d.items() if v > 20} # 字典推導式
下列物件在布林語境為 False:None、0、0.0、''、()、[]、{}、set()、自訂類別實作 __len__ 回傳 0 或 __bool__ 回傳 False。其餘皆為 True。
lst = [1, 2, 3]
it = iter(lst)
next(it) # 1
next(it) # 2
# 生成器函式
def gen(n):
for i in range(n):
yield i * i
g = gen(3)
list(g) # [0, 1, 4]
生成器惰性求值,記憶體效率極高,適合處理大量資料流。