今天我們來研究 unpacking。
在這之前,複習一下 tuple
能產生 tuple 的並不是括號,而是逗號:
a = (1, 2, 3)
type(a)
tuple
底下一樣是 tuple:
a = 1, 2, 3
type(a)
tuple
只有括號不會是 tuple,要注意!
a = (1)
type(a)
int
要加上逗號:
a = (1,)
type(a)
tuple
括號也不是必要,只是可能有助於閱讀:
a = 1,
type(a)
tuple
唯一沒有逗號的例外是空 tuple:
a = ()
type(a)
tuple
利用 tuple constructor 可能是更清楚的寫法:
a = tuple()
type(a)
tuple
Unpacking 指的是將可迭代的物件解開,得到裡面的內容物:
l = [1, 2, 3, 4]
a, b, c, d = l
print(a, b, c, d)
1 2 3 4
字串是 iterables,所以也可以 unpacking:
a, b, c = 'XYZ'
print(a, b, c)
X Y Z
利用 unpacking,我們可以很酷炫地把兩個變數相互交換。
其他語言(比如 Java)要交換變數可能是這樣寫:
a = 10
b = 20
print("a={0}, b={1}".format(a, b))
tmp = a
a = b
b = tmp
print("a={0}, b={1}".format(a, b))
a=10, b=20
a=20, b=10
以上要多設計一個暫存變數 tmp 儲存值。但利用 Python 的 unpacking 就不需如此:
a, b = 10, 20
print("a={0}, b={1}".format(a, b))
a, b = b, a
print("a={0}, b={1}".format(a, b))
a=10, b=20
a=20, b=10
集合是無序的,所以 unpacking 要小心:
(註:Python3.7以後的字典有序,之前無序。)
s = {'p', 'y', 't', 'h', 'o', 'n'}
type(s)
set
print(s)
{'p', 't', 'n', 'y', 'o', 'h'}
for c in s:
print(c)
p
t
n
y
o
h
a, b, c, d, e, f = s
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
p
t
n
y
o
h
好啦,今天就到這邊,我們明天見-
參考:Python 3: Deep Dive (Part 1 - Functional)