python 迭代器協議

2021-08-28 04:09:18 字數 1716 閱讀 1334

# 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...