迭代器與常用內建函式
阿新 • • 發佈:2021-11-19
一、迭代器
1.可迭代物件
物件內建方法上可以有__iter__的資料型別我們都可以稱之為可迭代物件,例如字串str、列表list、字典dict、元組tuple、集合set和檔案都是可迭代物件
2.迭代器物件
物件內建方法中既可以使用__iter__又可以使用__next__可以稱為迭代器物件,只有檔案本身就是迭代器物件,迭代器物件執行__iter__後還是迭代器物件,執行
__next__後會從迭代器中的下一個值
迭代器是一種可以不依賴於索引,可以迭代取值的方法,只要迭代器中還有值就可以一直取下去,沒有值了就會報錯
二、for迴圈原理
1.for迴圈會將 in 後面的資料先呼叫__iter__轉換為迭代器物件
2.將迭代器物件執行__next__,取出迭代器中的值
3.迭代器中沒有值後,自動捕獲該錯誤並處理
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55] res = l1.__iter__() while True: try: res1 = res.__next__() print(res1) except Exception: break
三、異常捕獲
什麼是異常:
程式碼執行過程中錯誤就會出現異常,如果沒有處理該異常,程式碼的執行就會終止。
異常的種類:
1.語法錯誤
這種錯誤是不被允許的,這種錯誤應該在程式執行前就發現並改正。
2.邏輯錯誤
這種錯誤是可以允許的,出現後立即改正即可。
異常的處理方式
指名道姓的解決異常方式:
try: 被檢測的程式碼塊 except NameError: 觸發NameError時對應的處理邏輯 except IndexError: 觸發IndexError時對應的處理邏輯 except KeyError: 觸發KeyError時對應的處理邏輯
萬能異常處理方式
try: 被檢測的程式碼塊 except Exception: 應對所有邏輯錯誤時對應的處理邏輯
ps:有可能出現錯誤的程式碼才需要被監測,異常不用的使用頻率越低越好
四、內建函式
1.map()對映
括號內可以填兩個元素,第一個元素填函式,第二個元素填若干列表,函式引數有幾個就填幾個列表
迴圈獲取列表中的每個元素並傳遞給函式後儲存返回值
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55] print(list(map(lambda x: x + 1, l1)))
2. zip()拉鍊
函式用於將可迭代的物件作為引數,將物件中對應的元素打包成一個個元組,然後儲存該值。
如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同
l = [11, 22, 33, 44, 55, 66, 77] name_list = ['jason', 'kevin', 'tony', 'jerry'] l1 = [1, 2, 3, 4, 5, 6, 7] l2 = [8, 7, 6, 4, 3, 2, 1] res = zip(l, name_list, l1, l2) print(list(res))
3.max()min()
該函式就是用來找括號中傳入可迭代物件中的最大值與最小值
l = [11, 22, 33, 44, 55, 66, 77] print(max(l)) print(min(l))
4.filter()過濾
括號內填兩個引數,第一個引數填函式,第二個引數填可迭代物件,將可迭代物件的中的元素放入函式中進行判斷,將True的元素返回成值並儲存
l = [11, 22, 33, 44, 55, 66, 77] res = filter(lambda x: x > 20, l) print(list(res))
5.reduce()歸總
在python3.x中想要使用reduce函式,必須先呼叫模組from functools import reduce
該內建函式有三個引數
- function -- 函式,有兩個引數
- iterable -- 可迭代物件
- initializer -- 可選,初始引數 # 填寫多少就在返回的結果上加上多少
- 該函式的返回值是返回函式計算結果
from functools import reduce
l = [11, 22, 33, 44, 55, 66, 77] res = reduce(lambda x, y: x + y, l, 100) print(res)