Python的迭代器和生成器

2022-06-02 01:48:13 字數 1497 閱讀 9032

在學習迭代器之前我們需要先來了解一下可迭代物件(iterable),對於iterator和iterable是兩個不同的概念。

iterable是含有__iter__方法或者__getitem__ 的乙個物件,當你想實現乙個iterable物件的時候,通過實現__iter__方法返回乙個iterator而不是iterable。檢查乙個物件是不是iterable物件可以通過from collections import iterable來判斷。對於乙個iterable的物件可以通過呼叫iter方法返回乙個iterator物件,然後進行for 迴圈訪問。

在python中 我們學過的所有的可以被for迴圈的基本資料型別 都是可迭代的 而不是迭代器。也就是說能被for迴圈的物件都是可迭代的。

到現在為止我們學過的可迭代物件主要有以下幾種:

迭代器肯定是iterable型別的物件,__iter__,__next__,可以對這樣乙個物件進行for 迴圈訪問。對於next方法需要注意的是,當沒有下乙個元素的時候系統會丟擲stopiteration異常。

當遍歷乙個迭代器的時候,它會修改內部狀態,導致你只能向前獲取下乙個元素,不能通過迭代器訪問前乙個元素;也就是說當你通過迭代器訪問了乙個元素以後,在當前迴圈中不能後退繼續訪問該元素了,除非你重新生產迭代器物件進行遍歷。

li = [1,2,3,4]

it =iter(li)

print

(next(it))

print('

下面是for迴圈的輸出結果')

for i in

it:

print(i)

1. 迭代器和可迭代物件之間的關係

2. 為什麼要有迭代器 迭代器存在的本質是什麼

生成器本質上也是迭代器,我們自己寫寫的迭代器就叫做生成器。

1

#生成器例項23

deffunc():

4for cloth in range(1,201):

5yield

'第%s件衣服

'%cloth

67 gen =func()89

for i in range(1,51):

10print(next(gen))

#

生成器實現檔案監控

deftail(filename):

f = open(filename,encoding='

utf-8')

f.seek(0,2)

while

true:

line =f.readline()

ifnot

line:

#time.sleep(0.1)

continue

yield

line

tail_gen = tail('

passwd.txt')

for line in

tail_gen:

print(line,end='')

Python迭代器和生成器

先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...

Python迭代器和生成器

迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...

python 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...