1. 程式人生 > 實用技巧 >Python教程:for迴圈本質

Python教程:for迴圈本質

我們先來看一下for迴圈的一些簡單應用:

ls=[1,2,3]
for i in ls:
    print(i)

我們知道這樣可以遍歷地取出這裡面的每一個元素,但是它的工作原理,我們都是模模糊糊的大概知道是那個樣子。其實for迴圈的工作流程是基於迭代器協議的。為明白他的整個工作流程,我們不得不先看一下迭代器協議。

迭代器協議

1.迭代器協議是指:物件必須提供一個next方法,執行該方法要麼返回迭代中的下一項,要麼就引起一個StopIteration異常,以終止迭代 (只能往後走不能往前退)

2.迭代器:實現了迭代器協議的物件(如何實現:物件內部定義一個__iter__()方法)

3.協議是一種約定,可迭代物件實現了迭代器協議,python的內部工具(如for迴圈,sum,min,max函式等)使用迭代器協議訪問物件。

注:可以通過__next__取值,就是迭代器

我們接下來就看看,for迴圈的具體工作過程:

for 迴圈在處理這些資料前,會呼叫 __ iter__() 方法,將這些資料轉化為一個迭代器,然後呼叫迭代器的 __ next__() 方法,並捕獲StopIteration異常,也就實現了遍歷完所有資料就會結束,並不會丟擲這個異常。

我們可以用下面的程式碼來實現for迴圈的功能:

'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
x=[1,2,3]
x_i=x.__iter__()
try:
    while True:
        print(x_i.__next__())
except StopIteration:
    pass