1迭代器:
# 什麼是迭代器:乙個實現了iter方法和next方法的物件就叫迭代器
from collections import iterable
#判斷物件型別使用 isinstance() 函式
#such:
print(isinstance([3,4],iterable)) #表示出列表可迭代
print(isinstance(3,iterable)) #int不可迭代
class
mylist
(object):
'''重寫list'''
def__init__
(self):
#初始化定義屬性
self.iter =
defadd(self,par):
#定義列表新增數值的新方法
def__iter__
(self):
'''魔法方法:表示物件可迭代'''
myiter = myiter(self.iter) #引入列表的迭代器
return myiter
class
myiter
(object):
'''實現迭代器'''
def__init__
(self,mylist):
#初始化,定義屬性
self.mylist = mylist
self.current_index = 0
def__iter__
(self):
#魔法方法:表示物件可迭代,返回值是他自己
return self
def__next__
(self):
#定義next後的狀態變化,也是迭代器最重要的一步
if self.current_index < len(self.mylist): #self.current_index從0開始,當他小於列表長度時
self.current_index +=1
#self.current_index加1
return self.mylist[self.current_index-1] #返回self.current_index加1前的狀態(這裡就是加1前的值)
else: #當self.current_index大於列表長度
raise stopiteration # raise:主動丟擲錯誤 再停止迭代 (next方法裡一定不能忘記的,不然會出錯使迭代不能停止)
defmain
(): mylist = mylist() #建立乙個物件
for i in range(10):
print('寫入的數為:',i)
mylist.add(i) #呼叫新方法將元素加到列表裡
for j in mylist:
print('取出的值為:',j)
if __name__ == '__main__':
main()
2生成器:
# 生成器是一種特殊的迭代器
# 迭代器需要手動記錄迭代位置
# 生成器使用yield
# 只要存在yield就是生成器
deffeibonaqi
(num):
'''實現了乙個斐波那契數列的生成器'''
a = 0
b = 1
current_index = 0
print('1'*30)
while current_index < num:
a,b = b,(a+b) #斐波那契實現的計算方法
current_index += 1
yield (a,b) #最重要是yield
# yield 特點:
# 1程式遇到 "只要" 遇到yield會暫停,如果yield後面有值,返回結果之後再暫停!!!!!
# 2再次啟動生成器,**從yield之後開始執行
print('2'*30)
defmain
(): result = feibonaqi(5)
print(result)
# next表示進入下一步狀態,直至遇見下乙個yield被暫停
print(next(result))
print(next(result))
print(next(result))
print(next(result))
if __name__ == '__main__':
main()
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 迭代器和生成器
迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...