iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0

今天我們來研究 unpacking。

在這之前,複習一下 tuple

Side Note on Tuples

能產生 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

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

Swapping Two Variables

利用 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 Unordered Objects

集合是無序的,所以 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)


上一篇
Positional Arguments
下一篇
Extended Unpacking
系列文
小青蛇變大蟒蛇——進階Python學起來!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言