1. 程式人生 > >生成器、協程、正則 簡單基礎

生成器、協程、正則 簡單基礎

生成器:一類特殊的迭代器

#生成器,一類特殊的迭代器(1.記錄位置2.返回值3.位置+1) #next —> 獲取下一個值 #生成器建立的兩種方式 #第一種 列表推導式 list2 = [0,2,4,6,8,10] print(list2) list3 = [x * 2 for x in range(10)] print(list3)

#生成器,把列表推導式的中括號改成小括號就變成生成器了 list4 = (x * 2 for x in range(10)) print(list4) value = next(list4) #通過next獲取值 print(value) value = next(list4) print(value) print(’---------------’) #第二種 函式使用了yield def test(): return 10 def test1(): yield m = test() print(m) m2 = test1() print(m2)

#建立一個實現斐波那契的生成器 def fibnacci(n): #n是指定的列數 #定義變數 a = 1 b = 1 #儲存位置 current_index = 0 print(’-------1--------’) #迴圈生成 while current_index < n: #返回a data1 = a #改變a,b的值 a,b = b, a+b #位置+1 current_index += 1 print(’-------2-------’) yield data1 #yield 可以充當返回值 #yield作用: #1.起到return的作用,可以返回值 #2.儲存a,b,,並且暫停程式的執行 print(’--------3---------’) if name

== ‘main’: #獲取生成器 fib = fibnacci(5) #取值 # value = next(fib) # print(value) #for遍歷 for value in fib: print(value)

協程: 是一個特殊的生成器  微執行緒、纖程  協程就是你可以暫停執行的函式  協程的操作是程式設計師

意義:對於多執行緒應用,cpu通過切片的方式來切換執行緒間的執行,協程切換時只使用一個執行緒(單執行緒),在一個執行緒中規定某個程式碼執行順序

協程的適用場景:當程式中存在大量不需要CPU的操作時,適用於協程。

greenlet: 是一個第三方的庫

gevent 也是用來協程的 能夠自動切換任務,自動識別耗時操作

猴子補丁作用: 1.在執行時替換方法、屬性等 2.再不修改第三方程式碼的情況下增加原來不支援的功能 3.在執行時為記憶體中的物件增加patch而不是在磁碟的原始碼中增加

程序執行緒協程對比:
			程序是系統進行資源分配排程的獨立單位,執行緒是cpu排程分派的基本單位,協程是一種使用者態的輕量級執行緒,協程的排程完全由使用者控制

應用場景: 多程序:密集cpu任務,需要充分使用多核cpu資源的時候用多程序:缺陷:多個程序之間通訊成本高,切換開銷大 多執行緒:密集io任務, 缺陷:同一個時間切片只能執行一個執行緒,不能做到高並行,但是可以做到高併發 協程:當程式中存在大量不需要cpu的操作時 缺陷:單執行緒執行,處理密集cpu和本地磁碟io的時候,效能比較低

正則表示式:又稱規則表示式 經常被用來檢索和替換那些符合某個模式的文字 可以: 測試字串的某個模式 實現按照某種歸則替換文字 根據模式從字串中提取一個子字串(爬蟲) [ol-] 匹配中括號中的任意字元 ^ 取反 [a-z] 匹配小寫字母a到z \d 匹配數字 \D匹配非數字的所有字元 \s 匹配空格 \S 除了空格的所有 \w 字母數字和下劃線 \W 與小寫取反 . 所有字元(除了\n)

  • 出現0次或n次 +匹配前一個字元出現1次或者無限次 ?匹配前一個字元出現1次或者0次 {m}匹配前一個字元出現m次 {m,n}匹配前一個字元出現m-n次

re模組 re.match(pattern,string,flags=0) pattern: