Python學習筆記(二)

2021-10-08 02:18:10 字數 1839 閱讀 3363

python中一切皆物件,每一次賦值都是物件引用的傳遞,而部分型別是不可變引用,所以賦值時實際是建立了新物件,引用新物件。

通過引入python模組re使用

re.match(正規表示式字串,原字串)返回從字串開始的匹配,不匹配返回none

re.search(正規表示式字串,原字串)會遍歷字串子串進行匹配直到找到第乙個符合的匹配,不匹配返回none

下面為常用正規表示式

super『返回從傳入第二個引數(物件)的mro類列表從傳入的類往右開始尋找到第乙個匹配的類,並把傳入物件轉化為該父類物件返回(可以呼叫父類同名方法),如果在父類中呼叫super(比較拗口,就是如果super的第二個引數是乙個子類物件),此時如果當前類(super第二個引數的型別,也就是子類的父類)的父類也是該子類物件的mro父類列表中,在自己右側的某一父類的父類,則super會定位到該mro父類執行

在python3中,super不需要傳入引數,預設第乙個傳入當前類的mro類列表的第乙個類(最左側),而第二個引數傳入self,比如

class a(object):

def f(self):

print('a\n')

class b(a):

def f(self):

print('b\n')

super(b,self).f()

class c(a):

def f(self):

print('c\n')

super(c,self).f()

class e(a):

def f(self):

print('e\n')

super(e,self).f()

class d(b,c,e):

def f(self):

print('d\n')

super(d,self).f()

d = d()

d.f()

上述**執行順序為: d b c e a

總的來說,就是呼叫super是在轉化當前物件為父類物件,因為兩個父類具備公共祖先,所以在某個父類轉化super時,發現在self物件的mro列表,比自己後的同級父類有個也是這個祖先的子類(黎克特制替換原則可以作為祖先類後代看待),所以優先轉化為該同級父類物件,而因為是固定的mro順序(從左往右),所以不會無限重複。

對於同乙個物件,不斷呼叫super就是先橫向(左到右的具備公共祖先的父類),後縱向(到公共祖先類)

如果乙個類是object的子類,則他是新式類,否則為經典類,新式類在匹配方法時,使用廣度優先原則(最接近當前類的父類方法),而經典類使用深度優先原則(離當前類最遙遠的父類方法),比如

#新式類

class a(object):

def f(self):

print 'a'

class b(a):

pass

class c(a):

def f(self):

print 'c'

class d(b,c):

pass

d = d()

d.f() #c

上述新式類最終匹配到的方法是類c中的方法

#經典類

class a:

def f(self):

print 'a'

class b(a):

pass

class c(a):

def f(self):

print 'c'

class d(b,c):

pass

d = d()

d.f() #a

而上述經典類最終匹配到的是最深的類a中的方法

python學習筆記(二)

集合 set是可變的集合,frozenset是不可變的集合 1.構造集合 s set abcde s set a b c s set abc def ghi s frozenset abcde 2.集合操作 1.新增元素 s.add b 2.刪除元素 s.remove obj 當該元素不存在時丟擲異...

Python學習筆記(二)

換了本書,開始看 python核心程式設計 從第三章開始看。只記一些與c c 不同的地方,一些相同之處略去不提。3.1語句與語法 1 跨行一般用反斜槓 有兩個例外,乙個是在括號裡,二是三引號中 print what the hell you waiting for?2推薦用四個空格寬度代替製表符縮排...

python學習筆記(二)

python數值處理 在互動模式下,把python當作計算器用不錯。1 整數做除法運算,除不盡時,取較小的那個數。如 7 3 2 7 3 3 不是 2哦 2 等號 用於給變數賦值,雙等號 用於數值比較。如 width 20 height 5 9 width height 900 if x 0 pri...