Contents
30.1.6. 把数据结构直接拆分到多个变量¶
Python内置的元组(tuple)类型可以创建不可变的序列,把许多元素依次保存起来。最简单的用法是只用元组保存两个值,例如字典里面的键值对。
snack_calories = {
"chips": 140,
"popcorn": 80,
"nuts": 190,
}
items = tuple(snack_calories.items())
print(items)
first = items[0]
second = items[1]
print(first, second)
city, num = first
print(city, num)
通过unpacking来赋值要比通过下标去访问元组内的元素更清晰,而且这种写法所需的代码量通常比较少。
当然,赋值操作的左边除了可以罗列单个变量,也可以写成列表、序列或任意深度的可迭代对象(iterable)
有了unpacking机制之后,只需要写一行代码就可以交换这两个元素,而不用像刚才那样分成三行来写。
def bubble_sort(a):
for _ in range(len(a)):
for i in range(1, len(a)):
if a[i] < a[i - 1]:
a[i - 1], a[i] = a[i], a[i - 1] # swap
name = ["ccc", "bbb", "aaa", "eeee"]
bubble_sort(name)
print(name)
做完unpacking后,系统会扔掉这个临时的元组。
首先调用内置的enumerate函数获得当前要迭代的元组,然后针对这个元组做unpacking,这才是符合Python风格的写法(Pythonic式的写法),我们不需要再通过下标逐层访问了。这种写法可以节省篇幅,而且比较容易理解。
t_snack_calories = tuple(snack_calories.items())
for i, (city, number) in enumerate(t_snack_calories):
print(f"index:#{i} city:{city} num:{number}")
要点:
unpacking是一种特殊的Python语法,只需要一行代码,就能把数据结构里面的多个值分别赋给相应的变量。
unpacking在Python中应用广泛,凡是可迭代的对象都能拆分,无论它里面还有多少层迭代结构。
尽量通过unpacking来拆解序列之中的数据,而不要通过下标访问,这样可以让代码更简洁、更清晰。