python-迭代器
在介紹迭代器之前,先說明下迭代的概念:
迭代:通過for循環遍歷對象的每一個元素的過程。
Python的for語法功能非常強大,可以遍歷任何可迭代的對象。
在Python中,list/tuple/string/dict/set/bytes都是可以迭代的數據類型。
可以通過collections模塊的Iterable類型來判斷一個對象是否可迭代:
from collections import Iterable print(isinstance('abcd', Iterable)) print(isinstance([1, 2, 3], Iterable)) print(isinstance(123, Iterable))結果:
True
True
False
?
迭代器
迭代器是一種可以被遍歷的對象,并且能作用于next()函數。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往后遍歷不能回溯,不像列表,你隨時可以取后面的數據,也可以返回頭取前面的數據。迭代器通常要實現兩個基本的方法:iter()?和?next()。
字符串,列表或元組對象,甚至自定義對象都可用于創建迭代器:
lis = [1, 2, 3, 4] it = iter(lis) #使用python內置的iter()方法創建迭代器對象 print(next(it)) print(next(it)) print(next(it)) print(next(it)) #print(next(it)) #當后面沒有元素可以next的時候,彈出錯誤結果:
1
2
3
4
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\test_r.py", line 89, in <module>
print(next(it)) #當后面沒有元素可以next的時候,彈出錯誤
StopIteration
?
或者使用for循環遍歷迭代器:
lis1 = [1, 2, 3, 4] it1 = iter(lis1) #創建迭代器對象 for i in it1:print(i,end=" ")結果:
1 2 3 4?
?
很多時候,為了讓我們自己寫的類成為一個迭代器,需要在類里實現__iter()__和__next()__方法。
總結:Python的迭代器表示的是一個元素流,可以被next()函數調用并不斷返回下一個元素,直到沒有元素時拋出StopIteration錯誤。可以把這個元素流看做是一個有序序列,但卻不能提前知道序列的長度,只能不斷通過next()函數得到下一個元素,所以迭代器可以節省內存和空間。
迭代器(Iterator)和可迭代(Iterable)的區別:
-
凡是可作用于for循環的對象都是可迭代類型;
-
凡是可作用于next()函數的對象都是迭代器類型;
-
list、dict、str等是可迭代的但不是迭代器,因為next()函數無法調用它們。可以通過iter()函數將它們轉換成迭代器。
-
Python的for循環本質上就是通過不斷調用next()函數實現的。
轉載于:https://www.cnblogs.com/R-bear/p/7744755.html
總結
以上是生活随笔為你收集整理的python-迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: phpdocumentor生成代码注释文
- 下一篇: python 学习笔记(十二) 文件和序