Python說文解字 雜談07

2022-09-18 10:15:26 字數 2941 閱讀 4377

1. 深入dict

from

a ={}

2.常用方法:

a = ,

"bobby2:

":}# clear

# a.clear()

#copy,返回淺拷貝

# new_dict =a.copy()

# new_dict[

"bobby1

"]["

company

"] = "

imooc3

"# 深拷貝

# import copy

# new_dict =copy.deepcopy(a)

# new_dict[

"bobby1

"]["

company

"] = "

imooc3

"# fromkeys

new_list = ["

bobby1

","bobby2"]

new_dict = dict.fromkeys(new_list,)

# get

# value = new_dict.get("

bobby

",{})

# print(value)

#items

# for key,value in

new_dict.items():

# print(key,value)

# setdefault

# 他對去呼叫d.

get(k,d)同時d[k] 設定

default_value = new_dict.setdefault("

bobby

","imooc")

print(new_dict)

# update:

new_dict.update(bobby="

imooc")

new_dict.update([(

"bobby

","imooc

")])

new_dict.update(((

"bobby

","imooc

"),))

3. dict的子類

# 不建議繼承list和dict

class

mydict(dict):

def __setitem__(self,key,value):

super().__setitem__(key,value*2

)my_dict = mydict(one=1

)my_dict[

"one

"] = 1

print(my_dict)

# 建議用userdict

from

collections import userdict

class

mydict(userdict):

def __setitem__(self,key,value):

super().__setitem__(key,value*2

)my_dict = mydict(one=1

)print(my_dict)

from

collections import defaultdict

class

mydict(userdict):

def __setitem__(self,key,value):

super().__setitem__(key,value*2

)my_dict = mydict(one=1

)print(my_dict)

my_dict =defaultdict(dict)

my_value = my_dict["

bobby"]

# __missing__方法,如果找不到某個key,那麼實現乙個keyvalue

記住:其實setdefault裡面實現了__missing__魔法函式,表示如果是找不到某個key,那麼實現乙個預設的keyvalue

3. set和frozenset

# set

集合 frozenset 不可變集合 無序 不重複

s = set('

abcde')

s = set(['

a','

b','c'

])print(s)

# 初始化方法

s =

print(type(s))

s2 = frozenset('

abcde

') # 不可變的型別,可以作為dict的key

print(s2)

記住:和數學的操作一樣,差集,交集,並集等。。

記住:在去重上應用很高,效能很高。

記住:還可以用:

for"c

"inset:

print (

"i am in set

")

記住:這裡就實現了__contain__方法

記住:還有實現了__issubset__方法

4. dict和set他們背後實現的原理:

1. dict的key或者set的值都是必須可以hash的,不可變物件都是可以hash的,str,fronzenset,tuple,自己實現的類的__hash__

2. dict的記憶體花銷大,但是查詢速度快,自定義的物件或者python內部的物件都使用dict包裝的。

3.dict的儲存順序和元素新增順序有關。

4.新增資料有可能改變已有資料的順序。

5.list和array是一種自增的方式,隨著資料在增加,申請記憶體空間的動作不斷操作。

6.dict只有在記憶體空間少於1/3的時候才會去申請記憶體空間。 

Python說文解字 雜談08

1.python變數到底是什麼?python和j a中的變數本質不一樣,python的變數實質是乙個指標 int str,便利貼 a 1 1.a貼在1上面 2.它的過程是先生成物件,然後貼便利貼。3.is 是指的標籤貼是否一樣。a 1 b 1 這個是一樣,用的是小整數的內部inter機制的內部優化。...

Python說文解字 雜談04

1.鴨子型別 當你看到乙隻鳥走來像鴨子,游泳起來像鴨子,叫起來也像鴨子,他麼他就可以叫做鴨子。任何可迭代的物件。一樣的方法,可以用可迭代的話,就可以迭代的組合列印。getitem 可以塞到任何的類中,跟鴨子型別一樣,指定相同的方法名。魔法函式正是充分運用了鴨子型別,能夠被本身呼叫。class cat...

Python說文解字 雜談02

1.py中三個中啊喲的概念type object和class的關係。type生成了int生成了1 type class obj type用來生成類物件的 object是最頂層的基類 type也是乙個類,同時type也是乙個物件 結論 類是由type這個類生成的物件。obejct是所有類都繼承的基類。...