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ù)對對象進(jìn)行索弓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__機(jī)制,就像之前那樣通過偏移量重復(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)文章
pyCaret效率倍增開源低代碼的python機(jī)器學(xué)習(xí)工具
這篇文章主要介紹了pyCaret一款可以使效率倍增的開源低代碼的python機(jī)器學(xué)習(xí)工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Python實現(xiàn)字符型圖片驗證碼識別完整過程詳解
這篇文章主要介紹了Python實現(xiàn)字符型圖片驗證碼識別完整過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Python argparse命令參數(shù)與config配置參數(shù)示例深入詳解
這篇文章主要介紹了Python argparse命令參數(shù)與config配置參數(shù),argparse是Python內(nèi)置的一個用于命令項選項與參數(shù)解析的模塊,通過在程序中定義好我們需要的參數(shù),然后在程序啟動命令行傳遞我們想要改變的參數(shù)2023-03-03
Python面向?qū)ο笾o態(tài)屬性、類方法與靜態(tài)方法分析
這篇文章主要介紹了Python面向?qū)ο笾o態(tài)屬性、類方法與靜態(tài)方法,結(jié)合實例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計中靜態(tài)屬性、類方法及靜態(tài)方法相關(guān)概念、使用方法及操作注意事項,需要的朋友可以參考下2018-08-08
Python數(shù)學(xué)建模PuLP庫線性規(guī)劃進(jìn)階基于字典詳解
在大規(guī)模的規(guī)劃問題中,這樣逐個定義變量和設(shè)置模型參數(shù)非常繁瑣,效率很低。Pulp 庫提供了一種快捷方式,可以結(jié)合 Python語言的循環(huán)和容器,使用字典來創(chuàng)建問題2021-10-10
python3.8中關(guān)于sklearn問題(win10)
這篇文章主要介紹了python3.8中關(guān)于sklearn問題(win10),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
獲取django框架orm query執(zhí)行的sql語句實現(xiàn)方法分析
這篇文章主要介紹了獲取django框架orm query執(zhí)行的sql語句實現(xiàn)方法,結(jié)合實例形式分析了Django框架中orm query執(zhí)行的sql語句獲取方法相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-06-06

