1. 程式人生 > >python-叠代器

python-叠代器

col sta min str ace 判斷 lin 函數 方法

在介紹叠代器之前,先說明下叠代的概念:

叠代:通過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()函數實現的。

python-叠代器