最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python如何定義一個迭代器去生成偶數(shù)數(shù)列

 更新時間:2024年02月19日 09:18:12   作者:正努力改變自己的人  
這篇文章主要介紹了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)文章

最新評論

称多县| 乌海市| 子长县| 息烽县| 独山县| 平和县| 南和县| 舒城县| 渭源县| 博野县| 固镇县| 大姚县| 镇沅| 鹤山市| 农安县| 监利县| 临洮县| 巫溪县| 永仁县| 遂宁市| 仁化县| 峡江县| 海阳市| 萍乡市| 四平市| 礼泉县| 吴旗县| 龙江县| 巩留县| 隆安县| 息烽县| 新密市| 翁源县| 屯门区| 博兴县| 繁昌县| 广安市| 邵武市| 黔江区| 和硕县| 丹阳市|