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...