# 1:迭代器協議是指:物件必須提供乙個next方法,# 執行該方法要麼返回迭代中的下一項 ,要麼就引起乙個stopiteratior異常,
# 以終止迭代(只能往後走不能往前退)
# 2:可迭代物件:實現了迭代器協議的物件
# (如何實現:物件內部定義乙個__iter__()方法)
# 3 協議是一種約定,可迭代物件實現了迭代器協議,
# python 的內部工具(如for迴圈,sum,min,max函式等)使用迭代器協議訪問物件
# for迴圈的本質:迴圈所有物件,全部是使用迭代器協議。
l='hello'
for i in range(len(l)):
print(i,l[i])
class foo:
def __init__(self,n):
self.n=n
def __iter__(self): #所有不可迭代的 加入iter 之後 都變得可迭代
return self
def __next__(self):
if self.n==100:
raise stopiteration("終止")
self.n+=1
return self.n #執行過後都儲存在 self.n裡
f1=foo(10)
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())
for i in f1:
print(i)
#斐波那契數列
class fib:
def __init__(self):
self.a=1
self._b=1
def __iter__(self):
return self
def __next__(self):
if self.a>100:
raise stopiteration("終止")
self.a,self._b=self._b,self.a + self._b
return self.a
f1=fib()
for i in f1: #只有字典才能 用迴圈中的 按照序號一一對應輸出
print(i)
print("___"*20)
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())
#方法二
a=0b=1
while b<=100:
print(b)
a ,b= b,a+b
def fibnum(n): #斐波那契數列
a, b = 0, 1
for i in range(n):
b, a = a+b, b
return b
n = int(input(">>:"))
if n == 1:
print(0)
elif n == 2:
print(1)
else:
print(fibnum(n-2))
python 迭代器協議 Python的迭代器協議
迭代器是python中的乙個高階概念,迭代器是乙個實現了迭代器協議的物件,那何為迭代器協議呢?滿足下面兩個條件就行。1 該物件實現了 iter 方法 2 該物件實現了next 方法,返回當前元素,並指向下乙個元素的位置,如果當前位置已無元素,則丟擲stopiteration異常。看下面例子 這說明列...
Python學習筆記 迭代器和迭代器協議
術語概念解釋 關於 for 迴圈 寫乙個迭代器 1 迭代器協議 迭代器協議是一種約定,即物件必須提供乙個 next 方法,執行該方法要麼返回迭代中的下一項,要麼丟擲乙個 stopiteration 異常,終止迭代。2 迭代器 iterator 迭代器是一種物件,一種可以被 next 函式呼叫並不斷返...
迭代器協議
l list hello 這就是在做例項化,list是乙個類 for i in l 先將乙個物件執行 iter print i class foo def init self,n self.n n def iter self return self def next self if self.n 1...