1. 程式人生 > 其它 >迭代器與常用內建函式

迭代器與常用內建函式

一、迭代器

  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)