20.1 元组是什么? #
元组是有序、不可变的集合,语法用圆括号 ()。创建后不能增删改元素
point = (10, 20)
config = ("localhost", 8080)20.2 创建元组 #
empty = ()
nums = (1, 2, 3)
one = (42,) # 单元素必须加逗号,否则是整数 42
also_one = 42, # 等价,但不推荐省略括号
data = tuple([1, 2, 3]) # 从列表转换20.3 访问元素 #
索引、切片与列表相同,但不能赋值修改:
fruits = ("apple", "banana", "orange")
print(fruits[0], fruits[-1])
print(fruits[1:3]) # ('banana', 'orange')
# fruits[0] = "x" # TypeError:不可变20.4 常用操作 #
t1 = (1, 2)
t2 = (3, 4)
print(t1 + t2) # (1, 2, 3, 4)
print(2 in t1) # False
print(len(t1)) # 2元组只有 count()、index() 等少量方法,没有 append、sort。
t = (1, 2, 3, 2, 1)
print(t.count(2)) # 输出 2,表示2在元组中出现了2次
print(t.index(3)) # 输出 2,表示3第一次出现的位置索引为220.5 元组解包 #
项目里最高频的用法之一:
def get_status():
return 200, "OK" # 实际返回元组
code, message = get_status()
print(code, message)
# 交换变量
a, b = 10, 20
a, b = b, a
# 忽略部分返回值
name, _, city = ("Alice", 30, "Beijing")20.6 列表 vs 元组:何时用哪个 #
| 场景 | 推荐 |
|---|---|
| 需要增删改、动态数据 | 列表 [] |
| 固定配置、常量 | 元组 () |
| 函数返回多个值 | 元组(自动)+ 解包 |
| 作为字典的键 | 元组(列表不可哈希) |
# 元组可作 dict 的键
locations = {(31.2, 121.5): "上海"}
# 列表不能作键
# {[1, 2]: "x"} # TypeError20.7 项目开发要点 #
- 默认用列表存业务数据;只有确定「不应被改」时用元组
- 多返回值用解包:
ok, data = fetch(),比取下标result[0]清晰 - 单元素元组别忘逗号:
(item,)不是(item) - 不要把元组当列表用:需要
append、排序就改用list - ORM / API 行数据:有时是
tuple,要改就list(row)再处理 - 常量配置:模块级
DB_CONFIG = ("host", 5432)可防止误改(也可用dataclass/ 配置类,后续章节)