迭代器
迭代器從表面上看是乙個數,當時用其中的資料時,每次從資料流中取乙個資料。直到資料被取完,而且資料不會被重複使用。
從**,迭代器是實現了迭代器協議方法的物件或類。迭代器協議方法主要是兩個:
自定義迭代器:
要定義乙個迭代器,只要定義乙個實現迭代器協議方法的類即可。
例子:
class myiterator:
def __init__(self,x=2,xmax=100):
self.__mul,self.__x = x,x
self.__xmax = xmax
def __iter__(self):
return self
def __next__(self):
if self.__x and self.__x != 1:
self.__mul *= self.__x
if self.__mul <= self.__xmax:
return self.__mul
else:
raise stopiteration
else:
raise stopiteration
if __name__ == '__main__':
myiter=myiterator()
for i in myiter:
print('迭代的資料元素為:',i)
內建迭代器工具:
python 語言中,已經內建了乙個用於產生迭代器的函式 iter(), 另外在標準庫的itertools模組中海油豐富的迭代工具,它們存在於itertools模組中
內建迭代器函式 iter()具有兩種使用方式:
iter(iterable)
iter(callable,sentinel)
第一種原型中只有乙個引數,要求引數為可迭代的型別。當然也可以使用前文所述的各種序列型別。
第二種原型中具有兩個引數,第乙個引數是可呼叫型別,一般為函式。第二個引數稱為哨兵。當第乙個引數呼叫返回值等於第二個引數時,迭代停止。
例子:
class counter:
def __init__(self,x=0):
self.x=x
counter =counter()
def user_iter():
counter.x += 2
return counter.x
for i in iter(user_iter,8):
print('本次遍歷的數值:',i)
itertools 模組中常用工具函式有近 二十個,主要有三類:
無限迭代器:
迭代短序列:
組合迭代序列
生成器使用生成器可以生成乙個值的序列用於迭代,並且這個值的序列不是一次生成的,而是使用乙個再生成乙個的確可以使程式節約大量記憶體
生成器建立
生成器物件是通過使用 yield關鍵字定義的函式物件,因此,生成器也是乙個函式。生成器用於生成乙個值得序列,一遍在迭代中使用。
例子:
def myyield(n):
while n>0:
print("開始生成...:")
yield n
print("完成一次...:")
n-=1
if __name__== '__main__':
for i in myyield(4):
print("遍歷得到的值",i)
print()
my_yield=myyield(3)
print('已經例項化生成器物件')
my_yield.__next__()
print('第二次呼叫__next__()方法:')
Python基礎(8)迭代器 生成器
一 什麼是迭代 1 重複 while true cmd input print cmd l a b c d count 0 while count len l print l count count 1 l a b c d for count in range len l print l count...
8 迭代器和生成器
iterable 可迭代 中有 iter 而iterator迭代器 繼承類iterable 並有魔法方法 next from collections.abc import iterable,iterator a 1,2 print isinstance a,iterable a是可迭代的 true ...
Python 迭代器 生成器
可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...