迭代器是一個能夠記住遍歷的位置的對象。
迭代器對象從集合的第一個元素開始訪問,直到全部的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
使用時首先判斷是不是能夠迭代,用isinstance()方法判斷或者能夠for循環的遍歷的對象是可迭代對象,能夠被next()函數調用,並不斷返回下一個值得對象。python
判斷是否能夠迭代算法
from collections import Iterable
str = 'abc'
if isinstance(str,Iterable):
print('true')
arr = [1,2,3]
if isinstance(arr,Iterable):
print('true')
tup = (1,'q',4)
if isinstance(tup,Iterable):
print('true')
dict = {'a':'1'}
if isinstance(dict,Iterable):
print('true')
a = 123
if isinstance(a,Iterable):
print('true')
else:
print('false')
輸出結果:bash
true
true
true
true
false
arr = [3,12,22,33]
if isinstance (arr,(str,tuple,list)):
print('true')
else:
print('error')
it = iter(arr)
for i in it:
print(i,end=" ")
結果:app
true
3 12 22 33
字符串,列表或元組對象均可用於建立迭代器:函數
list = [3,12,22,33]
it = iter(list) #建立一個迭代器對象
print(next(it)) #輸出迭代器的下一個對象
print(next(it))
輸出結果:ui
3 12
使用常規for語句進行遍歷:lua
list = [3,12,22,33]
it = iter(list)
for i in it:
print(i,end=" ")
輸出結果:spa
3 12 22 33
生成器自動建立了_iter_()和_next_()內置方法僅僅保存了一套生成數值的算法,調用時,纔去計算而後返回一個值。生成器必定是迭代器,而迭代器不必定是生成器,一邊循環一邊計算的機制稱爲生成器,含有yield語句的函數,能夠減小內存空間。code
在 Python 中,使用了 yield 的函數被稱爲生成器(generator)。
跟普通函數不一樣的是,生成器是一個返回迭代器的函數,只能用於迭代操做,更簡單點理解生成器就是一個迭代器。
在調用生成器運行的過程當中,每次遇到 yield 時函數會暫停並保存當前全部的運行信息,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。
調用一個生成器函數,返回的是一個迭代器對象。對象
#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函數 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
輸出結果:
0 1 1 2 3 5 8 13 21 34 55