python學習9 迭代器,生成器

2022-05-02 16:48:13 字數 1560 閱讀 1172

迭代:

迭代 就是 重複做一些事情多次(就像迴圈),實際上,只要實現了 __iter__方法的物件,就能就行迭代。

__iter__方法返回乙個迭代器,他具有 next()方法,,在呼叫next()方法時,迭代器會返回下乙個值,如果沒有值可以返回,則會引發乙個stopiteration異常。

迭代 相對於 列表的優勢:迭代 在使用時是 計算乙個值時獲取乙個值,而列表是一次性獲取所有值。如果有很多值,列表就會占用太多的記憶體。

示例如下:

1 >>> class

fibs:

2def

__init__

(self):

3 self.a =0

4 self.b = 1

5def

next(self):

6 self.a ,self.b = self.b,self.a +self.b

7return

self.a

8def

__iter__

(self):

9return self

上面的**中,迭代器實現了__iter__方法,這個方法實際上返回迭代器本身,在很多情況下,__iter__會放到其他的會在for迴圈的使用的物件中。

ps:正確的說法,乙個實現了 __iter__方法的物件是可迭代的,乙個實現了next方法的物件是迭代器

1 >>> fibs =fibs()

2 >>> for f in

fibs:

3if f > 1000:

4printf5

break67

8 1597

內建函式 iter 可以從可迭代的物件中獲取迭代器。

>>> it = iter((1,2,3))

>>>it.next()

1>>>it.next()

2>>>it.next()

3>>>it.next()

traceback (most recent call last):

file

"", line 1, in

it.next()

stopiteration

生成器含有 yield 語句的函式就叫生成器,他不想return 那樣返回值(返回多個值),而是每次產生乙個值,函式就會被凍結:即函式停在那點等待被啟用,函式被啟用後就從停止的那點開始執行。

示例如下:

1 >>> def

flatten(lis):

2for sublist in

lis:

3for element in

sublist:

4yield element

1 >>> for num in

flatten(lis):

2print

num3

4 15 2

6 37 4

8 59 >>>list(flatten(lis))

10 [1, 2, 3, 4, 5]

Python基礎9,迭代器和生成器

1,迭代器 dict1 print dir dict1 迭代 重複同乙個動作 list1 1 2,3 4,5 print dir list1 for i in list1 print i index 0while index len list1 print list index index 1從可迭...

Python 迭代器 生成器

可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...

python 迭代器,生成器

什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...