python迭代器使用_Python迭代器的用法
我們在前面使用過語句“for x in列表對象”,這就表示列表對象是可迭代的(Iterable)。那么如何判斷某個對象是否可迭代呢?答案是可以使用collections.Iterable類來判斷。
如下面的代碼所示,列表是可迭代的,整數是不可迭代的,字符串是可迭代的。
>>> from collections import Iterable # 引入Iterable類
>>> isinstance([], Iterable) # 列表是可迭代的
True
>>> isinstance(12, Iterable) # 整數是不可迭代的
False
>>> isinstance("12", Iterable) # 字符串是可迭代的
True
另外一個概念是迭代器(Iterator)。它可以作為內置函數 next() 的參數,每次按照一定順序得到其中一個元素。但比較有趣的是,列表不是迭代器。同樣可以用 collections.Iterator 類來判斷某個對象是否是迭代器。
如下面的代碼所示,列表和字符串都不是迭代器:
>>> from collections import Iterator # 引入Iterator類
>>> isinstance([], Iterator) # 列表不是迭代器
False
>>> isinstance("abc", Iterator) # 字符串也不是迭代器
False
那么列表是否可以作為 next() 的參數呢?答案是不可以。例如下面的代碼:
>>> a = [1, 2, 3] # 創建列表對象a
>>> next(a) # 使用內置的next()接口函數,發生錯誤
Traceback (most recent call last):
File "", line 1, in
TypeError: list object is not an iterator
這比較容易理解,因為我們沒有指定當前位置,但可以使用另外一個內置函數 iter() 來將其轉換成 Iterator。下面的代碼演示了這種用法:
>>> from collections import Iterable # 引入Iterable和Iterator類
>>> from collections import Iterator
>>> a = [1, 2, 3] # 創建列表對象a
>>> isinstance(a, Iterable) # 列表對象是可迭代的
True
>>> isinstance(a, Iterator) # 列表對象不是迭代器
False
>>> it_a = iter(a) # 從列表對象得到迭代器it_a
>>> isinstance(it_a, Iterable) # it_a是可迭代的,也是迭代器
True
>>> isinstance(it_a, Iterator)
True
>>> type(it_a) # it_a是列表型迭代器
>>> next(it_a) # 得到一個數據
1
>>> it_a.next() # 使用另外一種方式得到一個數據
2
>>> next(it_a)
3
>>> next(it_a) # 沒有數據了,拋出異常
Traceback (most recent call last):
File "", line 1, in
StopIteration
迭代器的一個特點是它只能使用一次,從頭部走到尾部。如果希望再次走一遍,只能創建一個新的迭代器。
總結
以上是生活随笔為你收集整理的python迭代器使用_Python迭代器的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python使用redis做缓存_Pyt
- 下一篇: python关键词提取源码_Python