一、迭代器
迭代器可以理解為是乙個容器,每次從容器中取出乙個資料,就是迭代操作,列表元組字串和字典都是迭代器,也都支援迭代操作。
迭代器有兩個基本的方法:
iter() :對乙個容器物件呼叫iter()就得到它的迭代器。
next():呼叫 next()迭代器就會返回下乙個值,如果沒有值返回了就會丟擲乙個stopiteration的異常。
>>
> str1 =
'laohu'
>>
>
>>
> data =
iter
(str1)
>>
>
>>
>
next
(data)
'l'>>
>
>>
>
next
(data)
'a'>>
>
>>
>
next
(data)
'o'>>
>
>>
>
next
(data)
'h'>>
>
>>
>
next
(data)
'u'>>
>
>>
>
next
(data)
traceback (most recent call last)
: file ""
, line 1,in
next
(data)
stopiteration
把乙個類作為迭代器需要在類中實現兩個方法
iter()::需要返回物件本身
next():返回容器中的下乙個元素,當資料取完時,要引發乙個stopiteration異常。
>>
>
#自定義迭代器,通過傳入最小值和最大值,返回該範圍內所有數值的平方。
>>
>
>>
>
class
number()
:def
__init__
(self,
min,
max)
: self.
min=
min self.
max=
maxdef
__iter__
(self)
:return self
def__next__
(self)
: num = self.
minif self.
min<= self.
max:
self.
min+=
1return num **
2else
:raise stopiteration
>>
>
for i in number(1,
7):print
(i,end=
'--')1
--4-
-9--
16--25
--36-
-49--
二、生成器
python中函式如果包含了yield關鍵字,那麼這個函式就不再是乙個普通函式,而是乙個生成器(generator)
生成器就是乙個迭代器,在呼叫生成器的過程中,每次遇到 yield 時函式會暫停並儲存執行資訊,並在下次執行 next() 方法時從當前位置繼續執行
>>
>
deftest_gene()
:print
('test generator'
)yield
'h'yield
'j'yield
'y'>>
> my_gene = test_gene(
)>>
>
>>
>
next
(my_gene)
test generator
'h'>>
>
next
(my_gene)
'j'>>
>
next
(my_gene)
'y'>>
>
next
(my_gene)
traceback (most recent call last)
: file ""
, line 1,in
next
(my_gene)
stopiteration
>>
>
yield 與 return 的區別:
a、return 語句執行後,會跳出當前函式,yield 不會。
b、yield 會儲存當前的執行狀態,再次呼叫會從上次暫停的位置繼續執行。
python中迭代器和生成器
迭代器 迭代器的實質是實現了next 方法的物件,常見的元組 列表 字典都是迭代器。迭代器中重點關注兩種方法 iter 方法 返回迭代器自身。可以通過python內建函式iter 呼叫。next 方法 當next方法被呼叫的時候,迭代器會返回它的下乙個值,如果next方法被呼叫,但迭代器沒有只可以返...
python中迭代器和生成器
1 迭代器 iterator 是乙個實現了迭代器協議的物件,python的一些內建資料型別 列表,陣列,字串,字典等 都可以通過for語句進行迭代,我們也可以自己建立乙個容器,實現了迭代器協議,可以通過for,next方法進行迭代,在迭代的末尾,會引發stopiteration異常。迭代器有兩個基本...
python中迭代器和生成器
這裡的迭代可以指for迴圈,在python中,對於像list,dict和檔案等而言,都可以使用for迴圈,但是它們並不是迭代器,它們屬於可迭代物件。1.1什麼可迭代物件 最簡單的解釋 可以使用for.in.語句進行迴圈的物件,就是可迭代物件 iterable 可以使用isinstance 方法進行判...