元组怎么写

用圆括号(也可以省略):

point = (3, 4)
point = 3, 4         # 等价

empty = ()
single = (1,)        # 单元素必须加逗号!(1) 是个数字

和列表的区别

t = (1, 2, 3)
t[0]              # 1     可以读
t[0] = 99         # TypeError: 不能改

t.append(4)       # AttributeError: 没有 append
t + (4, 5)        # 返回新元组,原 t 不变

元组一旦创建就不能变——这就是"不可变"。

为什么要不可变

  1. 可以当字典的键(list 不行)
    {(0, 0): "原点", (1, 1): "对角"}
    
  2. 多线程安全——别人不会偷偷改
  3. 比 list 更快、更省内存
  4. 表达"这是一组关联数据"的语义——比如坐标 (x, y)

拆包(最常用)

point = (3, 4)
x, y = point          # 同时赋值
print(x, y)           # 3 4

# 函数返回多个值,本质是返回元组
def divmod_(a, b):
    return a // b, a % b
q, r = divmod_(10, 3)    # 3, 1

交换变量

a, b = 1, 2
a, b = b, a           # 一行交换,不需要中间变量

星号拆包

first, *rest = [1, 2, 3, 4, 5]
print(first)    # 1
print(rest)     # [2, 3, 4]

实战:返回多个值

def get_user(uid):
    name = "WadeLy"
    age = 30
    return name, age      # 返回元组

name, age = get_user(1)   # 拆开接收

下一篇讲字典 Dict——Python 最重要的数据结构。