python如何定義一個迭代器去生成偶數(shù)數(shù)列
定義一個迭代器去生成偶數(shù)數(shù)列
#創(chuàng)建迭代器類 class EvenIterator: def __init__(self,min_value,max_value): # 初始化參數(shù) self.min_value = min_value self.max_value = max_value def __iter__(self): return self def __next__(self): # 在這里定義好累加條件 if self.min_value % 2 != 0:#判斷最小值是不是偶數(shù),不是則加1 self.min_value += 1 if self.min_value <= self.max_value: x = self.min_value self.min_value += 2 return x else:#拋出 StopIteration異常,結(jié)束代碼 raise StopIteration min_value = int(input("輸入需要生成偶數(shù)序列范圍的最小值")) max_value = int(input("輸入需要生成偶數(shù)序列范圍的最大值")) num2 = EvenIterator(min_value,max_value) #創(chuàng)建迭代器對象 print([i for i in num2],end="")#輸出偶數(shù)數(shù)組
python用戶定義的迭代器
迭代器基于下面兩個方法
(1)__next__
返回容器的下一個項目
(2)__iter__
返回迭代器本身
當(dāng)序列遍歷完時
將拋出StopIteration異常,所以通過捕獲這個異常來停止循環(huán)
下面是自定義迭代器的示例代碼:
class MyIterator(object): def __init__(self, step): self.step = step def __next__(self): if self.step == 0: raise StopIteration self.step -= 1 return self.step def __iter__(self): return self for i in MyIterator(6): print(i)
運行結(jié)果:
5
4
3
2
1
0
用戶定義的迭代器
如今,Python中所有的迭代壞境都會先嘗試_iter_
二方法,再嘗試_getite_
也就是說,它們寧愿使角第13章所學(xué)到的迭代協(xié)議,然后才是重復(fù)對對象進行索弓l運算。
如果對象不支持迭代協(xié)議,就會嘗試索引運算。
從技術(shù)角度來講,迭代環(huán)境是通過調(diào)用內(nèi)置函數(shù)iter去嘗試尋找iter方法來實現(xiàn)的,而這種方法應(yīng)該返回一個迭代器對象。
如果已經(jīng)提供了,Python就會重復(fù)調(diào)用這個迭代器對象的next方法,直到發(fā)生stop工teration異常。
如果沒找到這類__iter__
方法,Python會改用__getitem__
機制,就像之前那樣通過偏移量重復(fù)索引,直到引發(fā) IndexError異常。
下面的文件iters.py定義了用戶定義的迭代器類來生成平方值。
class Squares: def __init__(self, start, stop): self.value = start - 1 self.stop = stop def __iter__(self): return self def __next__(self): if self.value == self.stop: raise StopIteration self.value += 1 return self.value **2 #Python小白學(xué)習(xí)交流群:711312441 for i in Squares(1, 5): print(i)
運行結(jié)果:
1
4
9
16
25
用生成器函數(shù)編寫
def gsquares(start, stop): for i in range(start, stop+1): yield i ** 2 for i in gsquares(1, 5): print(i, end=" ")
運行結(jié)果:
1 4 9 16 25
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python爬蟲實現(xiàn)selenium處理iframe作用域問題
這篇文章主要介紹了Python爬蟲實現(xiàn)selenium處理iframe作用域問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python產(chǎn)生Gnuplot繪圖數(shù)據(jù)的方法
今天小編就為大家分享一篇Python產(chǎn)生Gnuplot繪圖數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python如何批量處理經(jīng)緯度數(shù)據(jù)并生成位置信息
這篇文章主要介紹了Python如何批量處理經(jīng)緯度數(shù)據(jù)并生成位置信息問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08