python 入門8 迭代器 生成器

2021-10-06 15:25:37 字數 2132 閱讀 4426

迭代器

迭代器從表面上看是乙個數,當時用其中的資料時,每次從資料流中取乙個資料。直到資料被取完,而且資料不會被重複使用。

從**,迭代器是實現了迭代器協議方法的物件或類。迭代器協議方法主要是兩個:

自定義迭代器:

要定義乙個迭代器,只要定義乙個實現迭代器協議方法的類即可。

例子:

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錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...