目錄:
一、迭代器
二、課時48課後習題及答案
一、迭代器
迭代的意思類似於迴圈,每一次重複的過程被稱為一次迭代的過程,而每一次迭代得到的結果會被用來作為下一次迭代的初始值。提供迭代方法的容器稱為迭代器,通常接觸的迭代器有序列(列表、元組、字串)還有字典也是迭代器,都支援迭代的此操作。
舉個例子,通常使用for語句來進行迭代:
>>> for i in字串就是乙個容器,同時也是乙個迭代器,for語句的作用就是觸發這個迭代器的迭代功能,每次從容器裡依次拿出乙個資料,這就是迭代操作。"fishc":
(i) fishc
字典和檔案也是支援迭代操作的:
>>> links =關於迭代,python提供了兩個bif:>>> for each in
links:
print('
%s->%s
'%(each,links[each]))
1->111111
2->222222
3->333333
4->444444
對於乙個容器物件呼叫iter()就得到它的迭代器,呼叫next()迭代器就會返回下乙個值,然後怎麼結束呢?如果迭代器沒有值可以返回了,python會丟擲乙個stopiteration的異常:
>>> string = "所以利用這兩個bif,可以分析出for語句其實是這樣工作的:fishc
">>> it =iter(string)
>>>next(it)'f
'>>>next(it)'i
'>>>next(it)'s
'>>>next(it)'h
'>>>next(it)'c
'>>>next(it)
traceback (most recent call last):
file
"", line 1, in
next(it)
stopiteration
>>> string = "那麼關於實現迭代器的魔法方法有兩個:fishc
">>> it =iter(string)
>>> while
true:
try:
each =next(it)
except
stopiteration:
break
(each)
fish
c
乙個容器如果是迭代器,那就必須實現__iter__()魔法方法,這個方法實際上就是返回迭代器本身。接下來重點是要實現的是__next__()魔法方法,因為它決定了迭代的規則。簡單舉個例子:
classfibs:
def__init__
(self):
self.a =0
self.b = 1
def__iter__
(self):
return
self
def__next__
(self):
self.a, self.b = self.b, self.a +self.b
return self.a
>>> fibs =fibs()好了,這個迭代器的唯一亮點就是沒有終點,所以如果沒有跳出迴圈,它會不斷迭代下去。那可不可以加乙個引數,用於控制迭代的範圍呢?>>> for each in
fibs:
if each < 20:
(each)
else
:
break
112358
13
>>> fibs =fibs()>>> for each in
fibs:
(each)
112358
13
>>> fibs = fibs(10)是不是很容易呢?就是那麼回事的啦。>>> for each in
fibs:
(each)
1123
58
二、課時48課後習題及答案
魔法方法 迭代器
讀書筆記 iterator 是迭代器。迭代器有兩種方法 iter 可迭代的物件 返回乙個迭代器 next 迭代器 返回迭代器的下乙個元素,若果迭代器為空,將引發stopiteration 演示 string zss041962 iter string at0x0000000002f53b38 ite...
Python入門學習筆記( 魔法方法 迭代器)
for i in fishc print i f ishc links 你好 syntaxerror invalid character in identifier links 你好 我好 for each in links print s s each,links each 你好 我好 迭代器 i...
python 魔法方法 定製序列 迭代器
容器型別的協議 如果說你希望定製的容器是不可變的話,你只需要定義 len 和 getitem 方法。如元組 字串 如果你希望定製的容器是可變的話,除了 len 和 getitem 方法,你還需要定義 setitem 和 delitem 兩個方法。容器型別的魔法方法如下 編寫乙個不可改變的自定義列表,...