天天看點

Python學習記錄day61.反射2.常用子產品

反射:利用字元串的形式去對象(預設)中操作(尋找)成員 

<code>cat commons.py</code>

<code>cat index.py</code>

以字元串方式導入子產品:

執行個體實質:僞造Web架構的路由系統 

getattr,delattr,setattr,hasattr

子產品中的特殊變量:

用于提供對Python解釋器相關的操作:

進度條案例:

用于提供系統級别的操作:

用于加密相關的操作,代替了md5子產品和sha子產品,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

簡介: 

就其本質而言,正規表達式(或re)是一種小型的、高度專業化的程式設計語言,(在Python中)它内嵌在Python中,并通過re子產品實作。正規表達式模式被編譯成一系列的位元組碼,然後由用C編寫的比對引擎執行。

字元: 

. 比對除換行符以外的任意字元 

\w 比對字母或數字或下劃線或漢字 

\s 比對任意的空白符 

\d 比對數字 

\b 比對單詞的開始或結束 

^ 比對字元串的開始 

$ 比對字元串的結束

次數: 

* 重複零次或更多次 

+ 重複一次或更多次 

? 重複零次或一次 

{n} 重複n次 

{n,} 重複n次或更多次 

{n,m} 重複n到m次

Python提供re子產品,包含所有正規表達式的功能。由于Python的字元串本身也用\轉義,是以要特别注意:

是以我們強烈建議使用Python的r字首,就不用考慮轉義的問題了:

先看看如何判斷正規表達式是否比對:

分組 

除了簡單地判斷是否比對之外,正規表達式還有提取子串的強大功能。用()表示的就是要提取的分組(Group)。比如:

^(\d{3})-(\d{3,8})$分别定義了兩個組,可以直接從比對的字元串中提取出區号和本地号碼:

如果正規表達式中定義了組,就可以在Match對象上用group()方法提取出子串來。 

注意到group(0)永遠是原始字元串,group(1)、group(2)……表示第1、2、……個子串。 

提取子串非常有用。來看一個更兇殘的例子:

這個正規表達式可以直接識别合法的時間。但是有些時候,用正規表達式也無法做到完全驗證,比如識别日期: 

<code>'^(0[1-9]|1[0-2]|[0-9])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]|[0-9])$'</code> 

對于’2-30’,’4-31’這樣的非法日期,用正則還是識别不了,或者說寫出來非常困難,這時就需要程式配合識别了。

編譯 

當我們在Python中使用正規表達式時,re子產品内部會幹兩件事情: 

編譯正規表達式,如果正規表達式的字元串本身不合法,會報錯; 

用編譯後的正規表達式去比對字元串。 

如果一個正規表達式要重複使用幾千次,出于效率的考慮,我們可以預編譯該正規表達式,接下來重複使用時就不需要編譯這個步驟了,直接比對:

match

執行個體:

search

findall

sub

split

常用正規表達式: