迭代:
迭代 就是 重複做一些事情多次(就像迴圈),實際上,只要實現了 __iter__方法的物件,就能就行迭代。
__iter__方法返回乙個迭代器,他具有 next()方法,,在呼叫next()方法時,迭代器會返回下乙個值,如果沒有值可以返回,則會引發乙個stopiteration異常。
迭代 相對於 列表的優勢:迭代 在使用時是 計算乙個值時獲取乙個值,而列表是一次性獲取所有值。如果有很多值,列表就會占用太多的記憶體。
示例如下:
1 >>> classfibs:
2def
__init__
(self):
3 self.a =0
4 self.b = 1
5def
next(self):
6 self.a ,self.b = self.b,self.a +self.b
7return
self.a
8def
__iter__
(self):
9return self
上面的**中,迭代器實現了__iter__方法,這個方法實際上返回迭代器本身,在很多情況下,__iter__會放到其他的會在for迴圈的使用的物件中。
ps:正確的說法,乙個實現了 __iter__方法的物件是可迭代的,乙個實現了next方法的物件是迭代器
1 >>> fibs =fibs()2 >>> for f in
fibs:
3if f > 1000:
4printf5
break67
8 1597
內建函式 iter 可以從可迭代的物件中獲取迭代器。
>>> it = iter((1,2,3))>>>it.next()
1>>>it.next()
2>>>it.next()
3>>>it.next()
traceback (most recent call last):
file
"", line 1, in
it.next()
stopiteration
生成器含有 yield 語句的函式就叫生成器,他不想return 那樣返回值(返回多個值),而是每次產生乙個值,函式就會被凍結:即函式停在那點等待被啟用,函式被啟用後就從停止的那點開始執行。
示例如下:
1 >>> defflatten(lis):
2for sublist in
lis:
3for element in
sublist:
4yield element
1 >>> for num inflatten(lis):
2print
num3
4 15 2
6 37 4
8 59 >>>list(flatten(lis))
10 [1, 2, 3, 4, 5]
Python基礎9,迭代器和生成器
1,迭代器 dict1 print dir dict1 迭代 重複同乙個動作 list1 1 2,3 4,5 print dir list1 for i in list1 print i index 0while index len list1 print list index index 1從可迭...
Python 迭代器 生成器
可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...
python 迭代器,生成器
什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...