Python基礎(15)——迭代器和for循環機制


遞歸和迭代的區別

遞歸是內部指針等待的一個過程,需要一直嵌套得到結果,而迭代是遍歷的過程,前面的過程結束后可以進行下一項,不需要等待

迭代器協議和for循環機制

對象必須提供一個next方法,執行這個方法要么返回迭代中的下一項,要么就引起一個stopiteration異常終止迭代(只能向后進行,不能向前)

可迭代對象,是實現了迭代器協議的對象,通過對象內部定義一個__iter__()方法

協議是一種約定,可迭代對象實現協議,那么就可以用迭代器協議訪問了,python內部工具for , sum min max 函數

但是字符串、列表、元組、集合、文件對象 這些都不是可迭代對象,只不過在for循環的作用下,for調用了他們內部的__iter__方法,把他們變成了可迭代對象

a = 'hello'
b = a.__iter__() #生成了一個b的迭代器對象地址
print(b.__next__()) #取值直到報錯

for循環實際上實現了__iter__()方法生成了一個迭代器對象,然后一步步next 直到報錯並返回 , 是一個完整的過程

對於序列如此,對於字典和文件等也是如此,統一生成迭代器來循環

所以,凡是能被for循環的對象內部都有一個__iter__()方法

for i in file: 所以讀取文件用for,文件生成迭代器是一行行讀,前面讀完的行內存就回收掉了,不占用內存

next()內置函數實際上就是實現對象內部的__next__()方法,效果一樣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM