首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 資料類型完整指南:從數值、字串到容器與編碼陷阱

     編輯:更多程式設計知識

Python 採「一切皆物件」設計,變數無需宣告型別,但理解底層資料模型對撰寫高效、無 Bug 程式碼至關重要。本文系統整理內建型別分類、操作方法、編碼處理與常見坑點。

一、數值型別

整數 int / 長整數 long

  • Python 3 統一為 int,無大小限制(受限於記憶體)。
  • Python 2:2**31-1 為 int 上限,超過自動轉 long(尾碼 L)。
  • sys.maxsize 取得平台最大整數(通常 2**63-1)。

浮點數 float

  • IEEE 754 雙精度,精度約 15~17 位十進位數字。
  • 財務計算請用 decimal.Decimal 避免二進位誤差。

複數 complex

z = 3 + 4j
print(z.real, z.imag, abs(z))  # 3.0 4.0 5.0

二、字串 str / bytes 與編碼

三種宣告方式

s1 = 'hello'
s2 = "hello"
s3 = '''多行
字串'''

Python 3 核心:Unicode 字串與位元組序列

  • str:Unicode 字串,內部為代碼點序列。
  • bytes:位元組序列,適用網路傳輸、檔案 I/O。
  • 轉換:str.encode('utf-8') → bytes,bytes.decode('utf-8') → str。

編碼實戰原則

  1. 檔案頂部宣告 # -*- coding: utf-8 -*-。
  2. 原始碼中中文字串加 u''(Python 2 必須,Python 3 可省略)。
  3. 讀寫檔案用 open(..., encoding='utf-8')(Py3)或 codecs.open(..., encoding='utf-8')(Py2)。
  4. 「用何種編碼寫,就用何種編碼讀」,跨系統交互時明確指定編碼。

常見亂碼場景與解法

# 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]

生成器惰性求值,記憶體效率極高,適合處理大量資料流。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved