本文實例講述了Python iter()函數用法。分享給大家供大家參考,具體如下:
python中的迭代器用起來非常靈巧,不僅可以迭代序列,也可以迭代表現出序列行為的對象,例如字典的鍵、一個文件的行,等等。
迭代器就是有一個next()方法的對象,而不是通過索引來計數。當使用一個循環機制需要下一個項時,調用迭代器的next()方法,迭代完后引發一個StopIteration異常。
但是迭代器只能向后移動、不能回到開始、再次迭代只能創建另一個新的迭代對象。
反序迭代工具:reversed()將返回一個反序訪問的迭代器。python中提供的迭代模塊:itertools模塊
先看幾個例子:
>>> l=[2,3,4]>>> iterl=iter(l)>>> iterl.next()2>>> iterl.next()3>>> iterl.next()4>>> iterl.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration
>>> d={'one':1,'two':2,'three':3}>>> d{'three': 3, 'two': 2, 'one': 1}>>> iterd=iter(d) #字典的迭代器會遍歷字典的鍵(key)>>> iterd.next()'three'>>> iterd.next()'two'>>> iterd.next()'one'>>> iterd.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration下面查看iter()函數的幫助信息:
>>> help(iter)Help on built-in function iter in module __builtin__:iter(...) iter(collection) -> iterator iter(callable, sentinel) -> iterator Get an iterator from an object. In the first form, the argument must supply its own iterator, or be a sequence. In the second form, the callable is called until it returns the sentinel.
iter()函數有兩種用法,一種是傳一個參數,一種是傳兩個參數。結果都是返回一個iterator對象。
所謂的iterator對象,就是有個next()方法的對象。next方法的慣例或約定(convention)是,每執行一次就返回下一個值(因此它要自己記錄狀態,通常是在iterator對象上記錄),直到沒有值的時候raiseStopIteration。
傳1個參數:參數collection應是一個容器,支持迭代協議(即定義有__iter__()函數),或者支持序列訪問協議(即定義有__getitem__()函數),否則會返回TypeError異常。
傳2個參數:當第二個參數sentinel出現時,參數callable應是一個可調用對象(實例),即定義了__call__()方法,當枚舉到的值等于哨兵時,就會拋出異常StopIteration。
>>> s='abc' #s支持序列訪問協議,它有__getitem__()方法>>> help(str.__getitem__)Help on wrapper_descriptor:__getitem__(...) x.__getitem__(y) <==> x[y]>>> s.__getitem__(1)'b'>>> s[1]'b'>>> iters=iter(s) #iters是一個iterator對象,它有next()和__iter__()方法>>> iters1=iters.__iter__()>>> iters2=iter(iters)>>> iters<iterator object at 0x030612D0>>>> iters1<iterator object at 0x030612D0>>>> iters2<iterator object at 0x030612D0>iters iters1 iters2 是同一個迭代器?。?gt;>> iters.next()'a'>>> iters.next()'b'>>> iters.next()'c'>>> iters.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration
新聞熱點
疑難解答