可迭代物件,顧名思義,即該物件可迭代,與迭代器的區別在於,物件內部未實現__next__的方法,僅僅實現了__iter__的方法,而迭代器中兩者均有實現。
可使用函式 isinstance(物件名,iterable)來判斷是否為可迭代物件。
迭代器與可迭代物件的區別在於,其中內部實現了__next__的方法,next方法用於定製for迴圈時具體的返回值及返回順序以及處理stopiteration異常等。迭代器中next方法與iter方法必須同時存在,不可分割,iter相當於可迭代的標識。
可使用函式isinstance(物件名,iterator)判斷是否為迭代器。
迭代器常用函式有:iter(obj) 和 next(),其中iter為建立乙個迭代器物件,傳入的物件一般為可迭代物件,如列表, 字串等等,next()函式為輸出迭代器中的元素,且只能往前不能退後。
自己建立迭代器實現斐波那契數列,例子:
class
myiter
:def
__iter__
(self)
: self.a =
0 self.b =
1return self
def__next__
(self)
:if self.a <=20:
self.a, self.b = self.b, self.b+self.a
return self.a
else
:raise stopiteration
a = myiter(
)for each in a:
print
(each)
在python中,使用了 yield 的函式被稱為生成器(generator), 它是可以返回乙個迭代器的函式。功能是:在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。
用生成器來實現斐波那契數列例子:
import sys
deffibo
(n):
# 生成器函式 - 斐波那契
a, b, count =0,
1,0while
true:if
(count > n)
:raise stopiteration
yield a #每次遇到yield函式暫停,返回a,在下一次呼叫next時,從下面的語句繼續執行
a, b = b, a + b
count +=
1f = fibo(20)
# f 是乙個迭代器,由生成器返回生成
while
true
:try
:print
(next
(f), end=
" ")
except stopiteration:
sys.exit(
)
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...
Python迭代器和生成器
迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...
python 迭代器和生成器
迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...