《流暢的Python》讀書筆記(三)

2021-10-01 07:57:41 字數 1562 閱讀 3201

country_code =

my_dict.setdefault(key,

)

使用 collections.defaultdict

>>

>

import collections

>>

> index = collections.defaultdict(

list

)>>

> index[

'hunan'

]'changsha'

)>>

> index

defaultdict(

<

class

'list'

>

,)

自定義乙個dict子類,子類中實現__missing__方法

dict[key] 會呼叫__getitem__方法,如果沒有找到,就會觸發__missing__方法

k in d 會呼叫__contains__方法,如果

注意:要小心陷入無限迴圈呼叫

>>

>

>>

> d =

>>

>>

> d_proxy

)>>

> d_proxy[1]

='x'

traceback (most recent call last)

: file ""

, line 1,in

typeerror:

object does not support item assignment

set和frozenset直到 python2.3才首次出現,在python2.6中公升級為內建型別

>>

> l =

['spam'

,'spam'

,'eggs'

,'spam'

]>>

>

set(l)

>>

>

list

(set

(l))

['spam'

,'eggs'

]

found =

len(

set(needles)

&set

(haystack)

)

以上例子,在含有 10000000個元素中搜尋1000個值,大概只需要3毫秒左右。

在有1000萬個鍵的字典裡查詢1000個數,只需要 0.000337秒

使用集合的時間差不多

使用列表的速度最慢,需要100秒左右

1. 字典算得上是python的基石

2. python的特點是「簡單而正確」

3. 由於擁有緊湊的列表和字典表達,json格式可以完美地用於資料交換

《流暢的Python》讀書筆記

第1章 python資料模型 通過實現特殊方法,自定義資料型別可以表現得和內建型別一樣 repr 方便除錯和記錄日誌,str 方便使用者看 序列資料型別特殊方法使用最多 第2章 序列構成的陣列 系列型別可分為 可變和不可變 扁平序列和容器序列 列表推導生成器表示式提供了靈活構建和初始化序列的方式 元...

流暢的python讀書筆記

1.雖然也可以用列表推導來初始化元組 陣列或其他序列型別,但是生成器表示式是更好的選擇。這是因為生成器表示式背後遵守了迭代器協議,可以逐個地產出元素,而不是先建立乙個完整的列表,然後再把這個列表傳遞到某個建構函式裡。前面那種方式顯然能夠節省記憶體。生成器表示式的語法跟列表推導差不多,只不過把方括號換...

《流暢的python》讀書筆記(7)

增量賦值運算子 和 的表現取決於它們的第乙個操作物件 背後的特殊方法是iadd 用於 就地加法 但是如果乙個類沒有實現這個方法的話,python 會退一步呼叫 add 如果 a 實現了iadd方法,就會呼叫這個方法。同時對可變序列 例如list bytearray 和 array.array 來說,...