私人筆記,有錯誤煩請指正
Fluent Python Github
序列(Sequence)
可分成容器序列、一般序列;或分成可變及不可變。容器序列保存物件的參考,可以是任何型態;一般序列實際儲存項目的值,但只能保存數字、字元或位元組
容器
「有些物件裡面有其他物件的參考,這些物件稱為容器」
collections.abc
List Comprehension(listcomp)
如果你不是只想建構串列,就不該使用listcomp,如果listcomp的長度太長,請考慮用for迴圈。Python 2.x 中listcomp中的變數會影響到外部環境的變數
Generator Expression(genexp)
串列以外的序列類型應該使用genexp,可節省記憶體空間(透過for迴圈一次產生一個項目)
Tuple可充分扮演紀錄的角色,原因是他的拆解機制(Unpacking)
slice跟range排除最後一個項目的原因
- 容易看出或計算長度,range(start, stop)或my_list[start:stop]的長度都是stop – start
- 區分序列成多個部份而不會重疊,my_list[:x]與my_list[x:]
建構巢狀串列
重要的Python API慣例
當函式或方法就地改變物件時,必須回傳None,來讓呼叫方知道物件本身已被改變,而且沒有創建新的物件,e.g. list.sort、random.shuffle。這樣做有一個缺點,無法層疊這些方法的呼叫式(Fluent Interface 流式接口);反之,會回傳新的物件的例子如sorted、所有str的方法
待補充:bisect、memorview, numpy.ndarray, collections.deque
拿list來裝混合型態的物件並不實用,因為list的某些操作可能會無法使用,請用tuple,因為相較之下這種作法自然很多(tuple每個項目其實都代表是個欄位)
list.sort與sorted的排序演算法是用Timesort,會根據資料的排序狀況來決定用插入排序還是合併排序