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