迭代器與生成器

2022-08-23 18:24:09 字數 2416 閱讀 8910

迭代器, 生成器

class range:

def __init__(self, start, end=none, step=1):

if end is none:

self.end = start

self.start = 0

else:
self.start = start

self.end = end

self.step = step

def __iter__(self):

return self

def __next__(self):

if self.start < self.end:

current = self.start

self.start += self.step

return current

else:
raise stopiteration()

str / bytes / list / tuple / dict / set自身不是迭代器,他們自身不具備__next__(), 但是具有__iter__(),__iter__()方法用來把自身轉換成乙個迭代器

練習1: 定義乙個隨機數迭代器, 隨機範圍為 [1, 50], 最大迭代次數 30

import random

class randomiter:

def __init__(self, start, end, times):

self.start = start

self.end = end

self.count = times

def __iter__(self):

return self

def __next__(self):

self.count -= 1

if self.count >= 0:

return random.randint(self.start, self.end)

else:
raise stopiteration()

練習2: 自定義乙個迭代器, 實現斐波那契數列

class fib:

def __init__(self, max_value):

self.prev = 0

self.curr = 1

self.max_value = max_value

def __iter__(self):

return self

def __next__(self):

if self.curr <= self.max_value:

res = self.curr

self.prev, self.curr = self.curr, self.prev + self.curr  # 為下一次做準備

return res

else:
raise stopiteration()

練習3: 自定義乙個生成器函式, 實現斐波那契數列

def fib(max_value):

prev = 0

curr = 1

while curr < max_value:

yield curr

prev, curr = curr, curr + prev

迭代器、生成器有什麼好處?

各種推導式

迭代器與生成器

可迭代物件 可以直接作用於for迴圈的物件 統稱為可迭代物件 返回迭代器的物件 即iterable。一是集合資料型別,如list tuple dict set str等 二是generator,包括生成器和帶yield的generator function。容器 簡單來說 容器是一系列元素的集合 容...

生成器與迭代器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...

生成器與迭代器

通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...