generator: 生成器是一種特殊的迭代器, 不需要自定義 __iter__ 和 __next__
生成器函式 (yield)
生成器表示式
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()
iterator: 任何實現了 __iter__ 和 __next__ 方法的物件都是迭代器.
__iter__ 得到乙個迭代器。迭代器的__iter__()返回自身
__next__ 返回迭代器下乙個值
如果容器中沒有更多元素, 則丟擲 stopiteration 異常
python2中沒有 __next__(), 而是 next()
str / bytes / list / tuple / dict / set 自身不是迭代器,他們自身不具備 __next__(), 但是具有 __iter__(), __iter__() 方法用來把自身轉換成乙個迭代器
示例 :
定義乙個隨機數迭代器, 隨機範圍為 [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()
python高階 迭代器 生成器
迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有 list tuple等都是可迭代物件,我們可以通過iter 函式獲取這些可迭代物件的迭代器。然後我們可以對獲取到的迭代器不斷使用next 函式來獲取下一條資料。iter 函式實際上就是...
python迭代器生成器高階
def num for i in range 1,4 print i,傳送出去 try a yield i print a,接受外部引數 except exception print 接收錯誤並處理 i num nu next i print nu,接收迭代引數 while true try if ...
Python 高階 迭代器與生成器
特殊方法 iter 是迭代器規則 iterator protocol 的基礎。iter 需要返回乙個迭代器 iterator 所謂的迭代器就是具有 next 方法 該方法在呼叫時不需要任何引數 的物件。在呼叫 next 方法時,迭代器會返回它的下乙個值。如果 next 方法被呼叫,而迭代器沒有值可以...