Python 3 cookbook 學習筆記(一)

全書鏈接:https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html

最近在看這本書,感覺知識點挺豐富,結合個人理解和需要,整理並記錄下學習點。

1.1 解壓分解序列

通過賦值操作可以實現對可迭代對象的解壓分解。

# 分解元組, 得到 x = 4, y = 5
x,y = (4,5)

# 分解列表
name, shares, price, date = [ 'ACME', 50, 91.1, (2012, 12, 21) ]

# 分解字符串
a, b, c, d, e = 'Hello'

注意:被賦值變量個數與可迭代對象元素個數要匹配,否則會報錯;若只想解壓部分值賦值給變量,可採用如下方式:

data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
_, shares, price, _ = data

通過單下劃線變量來佔位,但最終這些變量會被丟掉不使用。

1.2 單星號標記變量

剛提到,若變量個數與可迭代對象元素個數不匹配會報錯。倘若可迭代對象中元素個數過多,想提取的變量只有特定幾個,該如何實現?

在要被賦值的變量前用單星號進行標記,表示該變量爲可變變量,其被賦值內容將由其它變量賦值操作決定,剩餘元素會以列表的形式賦值給該可變變量。

record = ('Dave', '[email protected]', '773-555-1212', '847-555-1212')
name, email, *phone_numbers = record
# name = 'Dave'
# email = '[email protected]'
# phone_numbers = ['773-555-1212', '847-555-1212']

注意,星標的可變變量類型是列表,即使可迭代對象中對應的元素爲空,也將以空列表的形式賦值給該變量。

1.3 固定大小的隊列

collections 模塊中的 deque(maxlen=N) 可以構造一個固定大小爲 N 的隊列,當第 N+1 個元素加入時,隊列會移除隊列中舊元素維持隊列大小,在該隊列兩端插入或刪除元素的時間複雜度都是 O(1)。

from collections import deque

q = deque(maxlen = 3)
q.append(1)
q.append(2)
q.append(3)
q.append(4)
q.append(5)
print(q)
# 輸出:deque([3, 4, 5], maxlen=3)

該隊列除了通過 append() 和 pop() 在尾端增刪元素,還可以通過 appendleft(n) 和 popleft() 在隊列開頭增刪元素。

# 左側加入 100,得到 [100,3,4]
q.appendleft(100)
# 右側移除一個元素,得到 [100,3]
q.pop()
# 左側移除一個元素,得到[3]
q.popleft()
print(q)
# 輸出:deque([3], maxlen=3)

注意,當隊列已滿時,通過 appendleft(n) 在隊列左側繼續添加元素,則隊列將會移除最右側元素;若通過 append(n) 在最右側添加元素時,則移除最左側的元素。

該譯本中的描述:“當新的元素加入並且這個隊列已滿的時候, 最老的元素會自動被移除掉”有誤導,已經通過 GitHub Issue 進行反饋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章