解構任務

在賦值中,你可以使用解包語法將 Iterable 拆分為值:

作為值的解構

a, b = (1, 2)
print(a)
# Prints: 1
print(b)
# Prints: 2

如果你嘗試解壓縮超過迭代的長度,你將收到錯誤:

a, b, c = [1]
# Raises: ValueError: not enough values to unpack (expected 3, got 1)

Python 3.x > 3.0

作為清單進行解構

你可以使用以下語法解壓縮未知長度的列表:

head, *tail = [1, 2, 3, 4, 5]

在這裡,我們將第一個值提取為標量,將其他值提取為列表:

print(head)
# Prints: 1
print(tail)
# Prints: [2, 3, 4, 5]

這相當於:

l = [1, 2, 3, 4, 5]
head = l[0]
tail = l[1:]

它也適用於列表末尾的多個元素或元素:

a, b, *other, z = [1, 2, 3, 4, 5]
print(a, b, z, other)
# Prints: 1 2 5 [3, 4]

忽略解構分配中的值

如果你只對給定值感興趣,可以使用 _ 表示你不感興趣。注意:這仍然會設定 _,只是大多數人不會將它用作變數。

a, _ = [1, 2]
print(a)
# Prints: 1
a, _, c = (1, 2, 3)
print(a)
# Prints: 1
print(c)
# Prints: 3

Python 3.x > 3.0

忽略解構分配中的列表

最後,你可以在賦值中使用*_ 語法忽略許多值:

a, *_ = [1, 2, 3, 4, 5]
print(a)
# Prints: 1

這不是很有趣,因為你可以在列表上使用索引。好的方法是在一個賦值中保留第一個和最後一個值:

 a, *_, b = [1, 2, 3, 4, 5]
 print(a, b)
 # Prints: 1 5

或者一次提取多個值:

 a, _, b, _, c, *_ = [1, 2, 3, 4, 5, 6]
 print(a, b, c)
 # Prints: 1 3 5