一、核心定义
元组是"不可变的列表":
一旦创建,内容无法修改(不能增/删/改元素)。适合存储固定数据(如配置项、常量)。
# 创建后无法修改
config = ("admin", "P@ssw0rd", 8080)
config[0] = "user" # 报错:'tuple' object does not support item assignment
二、元组 vs 列表 核心区别
特性 | 元组(tuple) | 列表(list) | 办公自动化场景选择 |
可变性 | 不可变 | 可变 | 配置项用元组,动态数据用列表 |
内存占用 | 更小(约少16%) | 更大 | 处理大文件时优先考虑元组 |
操作速度 | 访问更快 | 修改操作较慢 | 高频读取数据用元组 |
适用场景 | 固定数据/配置/常量 | 动态数据集合 | |
语法 | (1, 2) 或 1, 2 | [1, 2] | |
能否做字典键 | 可以 | 不可以 | 坐标点等复合键必须用元组 |
# 内存对比实测(办公自动化重点)
import sys
data_list = [1, 2, 3, 4, 5]
data_tuple = (1, 2, 3, 4, 5)
print(f"列表占用内存: {sys.getsizeof(data_list)} 字节") # 120 字节
print(f"元组占用内存: {sys.getsizeof(data_tuple)} 字节") # 80 字节
三、适用场景(办公自动化重点)
固定配置项
# 文件类型白名单
ALLOWED_FILES = ('.xlsx', '.docx', '.pdf')
if filename.endswith(ALLOWED_FILES):
process_file(filename) # 安全处理文件
函数多返回值
def analyze_excel(file):
row_count = 1024
col_count = 8
has_errors = False
return row_count, col_count, has_errors # 自动打包为元组
# 接收返回值
rows, cols, errors = analyze_excel("销售报表.xlsx")
多变量同步赋值
# 批量赋值
name, dept, salary = ("张三", "财务部", 8500)
# 交换变量(无临时变量)
a, b = 10, 20
a, b = b, a # a=20, b=10
字典复合键
# 存储部门-月份数据
sales_data = {
("销售部", "2023-01"): 150_000,
("技术部", "2023-01"): 80_000
}
print(sales_data[("销售部", "2023-01")]) # 150000
四、办公自动化实战案例
场景:批量处理月度报告
# 元组存储固定报表模板路径
REPORT_TEMPLATES = (
r"D:\月度报告\销售模板.xlsx",
r"D:\月度报告\库存模板.xlsx",
r"D:\月度报告\财务模板.xlsx"
)
# 元组存储月份
MONTHS = ("2023-01", "2023-02", "2023-03")
for month in MONTHS:
for template in REPORT_TEMPLATES:
# 生成当月报告路径
report_path = template.replace("模板", month)
generate_report(template, report_path) # 生成报告函数
print(f"已生成报告: {report_path}")
五、高级技巧:命名元组
from collections import namedtuple
# 定义员工结构(比类更轻量)
Employee = namedtuple("Employee", ["name", "dept", "extension"])
# 创建员工记录
staff = [
Employee("张三", "行政部", 8001),
Employee("李四", "IT部", 8002)
]
# 清晰访问属性
for person in staff:
print(f"{person.name} 分机号: {person.extension}")
# 比 person[0] 更易读
