可迭代物件+迭代器物件+異常捕獲
阿新 • • 發佈:2021-11-20
可迭代物件+迭代器物件+異常捕獲
一、常用內建函式
1. 對映 map()
迴圈獲取列表中每個元素並傳遞給匿名函式儲存返回值
2.拉鍊 zip()
# for迴圈先取值 之後再比較大小
上圖中,可更換容器型別輸出,但是輸出後,記憶體就沒有值了,再同容器型別輸出就是空的了。
3.最大值、最小值 max() min()
4. 過濾 filter()
5. 歸總 reduce()
還可以額外新增元素值
每一次對過程的重複稱為一次“迭代”,而每一次迭代得到的結果會作為下一次迭代的初始值,單純的重複並不是迭代
上圖:以每次重新賦值後的index值作為下一次迴圈中新的索引進行取值,反覆迭代,最終可以取盡列表中的值
可迭代物件呼叫__iter__方法會變成迭代器物件(老母豬)__iter__方法在呼叫的時候還有一個簡便的寫法iter() 一般情況下所有的雙下方法都會有一個與之對應的簡化版本 方法名()
三、
迭代器物件:即含有__iter__方法 又含有__next__方法即含有__iter__方法 又含有__next__方法,如何生成迭代器物件,讓可迭代物件執行__iter__方法。
檔案物件本身即是可迭代物件又是迭代器物件,迭代器物件無論執行多少次__iter__方法 還是迭代器物件(本身)
迭代器是Python提供的一種統一的、不 依賴於索引的迭代取值方式,只要存在多個“值”,無論序列型別還是非序列型別都可以按照迭代器的方式取值
四、for迴圈的本質
有了迭代器後,我們便可以不依賴索引迭代取值了,使用while迴圈的實現方式如下
for迴圈又稱為迭代迴圈,in後可以跟任意可迭代物件,上述while迴圈可以簡寫為:
五、迭代器的優缺點
基於索引的迭代取值,所有迭代的狀態都儲存在了索引中,而基於迭代器實現迭代的方式不再需要索引,所有迭代的狀態就儲存在迭代器中,然而這種處理方式優點與缺點並存
-
優點:
- 為序列和非序列型別提供了一種統一的迭代取值方式;
- 惰性計算:迭代器物件表示的是一個數據流,可以只在需要時才去呼叫next()來計算出一個值;就迭代器本身來說,同一時刻在記憶體中只有一個值,因而可以存放無限大的資料流,而對於其他容器型別,如列表,需要把所有的元素都存放於記憶體中,受記憶體大小的限制,可以存放的值的個數是有限的。
-
缺點:
- 除非取盡,否則無法獲取迭代器的長度;
- 只能取下一個值,不能回到開始,更像是“一次性的”,迭代器產生後的唯一目標就是重複執行next()方法直到值取盡,否則就會停留在某個位置,等待下一次呼叫next();若是要再次迭代同個物件,你只能重新呼叫iter()方法去建立一個新的迭代器物件,如果有兩個或者多個迴圈使用同一個迭代器,必然只會有迴圈能取到值。
六、異常捕獲
# 什麼是異常 程式碼執行出錯會導致異常 異常發生後如果沒有解決方案則會到底整個程式結束 # 異常三個重要組成部分 1.traceback 翻到最下面從下往上的第一個藍色字型滑鼠左鍵點選即可跳轉到錯誤的程式碼所在的行 2.XXXError 錯誤的型別 3.錯誤型別冒號後面的內容 錯誤的詳細原因(很重要 仔細看完之後可能就會找到解決的方法)
# 錯誤的種類 1.語法錯誤 不被允許的 出現了應該立刻修改!!! 2.邏輯錯誤 可以被允許的 出現了之後儘快修改即可 '''修改邏輯錯誤的過程其實就是在從頭到尾理清思路的過程'''
1. 語法錯誤
2.另一種就是邏輯錯誤,出現了之後儘快修改即可
基本語法結構
基本語法結構 try: 有可能會出錯的程式碼 except 錯誤型別 as e: 出錯之後對應的處理機制(e是錯誤的詳細資訊) except 錯誤型別 as e: 出錯之後對應的處理機制(e是錯誤的詳細資訊) except 錯誤型別 as e: 出錯之後對應的處理機制(e是錯誤的詳細資訊)
對應錯誤的公式如下:
萬能公式如下:
1 # 萬能異常 2 try: 3 # int('abc') 4 print(name) 5 # l = [11] 6 # l[100] 7 except Exception: 8 print('你來啥都行 無所謂')萬能公式