Python 高階3 迭代器, 生成器

2021-09-02 18:10:13 字數 1371 閱讀 5507

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 方法被呼叫,而迭代器沒有值可以...