Python之迭代器與生成器

2021-10-02 23:31:05 字數 2874 閱讀 9415

每一次對過程的重複稱為一次「迭代」,而每一次迭代得到的結果會作為下一次迭代的初始值。

例如:迴圈獲取容器中的元素。

定義:具有__iter__()函式的物件,可以返回迭代器物件。例如列表,元組

語法:-- 建立:

class 可迭代物件名稱:

def __iter__(self):

return 迭代器

-- 使用:

for 變數名 in 可迭代物件:

語句

原理:

迭代器 = 可迭代物件.__iter__()

while true:

try:

print(迭代器.__next__())

except stopiteration:

break

語法:

class 迭代器類名:

def __init__(self, 聚合物件):

self.聚合物件= 聚合物件 

def __next__(self):

if 沒有元素:

raise stopiteration

return 聚合物件元素

說明:

-- 聚合物件通常是容器物件。

作用:使用者只需通過一種方式,便可簡潔明瞭的獲取聚合物件中各個元素,而又無需了解其內部結構。

示例:

class employee:

def __init__(self, name):

self.name = name

def __str__(self):

return self.name

class employeemanager:

def __init__(self, employees):

self.all_employee = employees

def __iter__(self):

return employeeiterator(self.all_employee)

class employeeiterator:

def __init__(self, collection):

self.collection = collection

self.index = 0

def __next__(self):

if self.index > len(self.collection) - 1:

raise stopiteration()

item = self.collection[self.index]

self.index += 1

return item

manager = employeemanager([employee("張三"), employee("李四")])

for emp in manager:

print(emp)

定義:能夠動態(迴圈一次計算一次返回一次)提供資料的可迭代物件。

作用:在迴圈過程中,按照某種演算法推算資料,不必建立容器儲存完整的結果,從而節省記憶體空間。資料量越大,優勢越明顯。

以上作用也稱之為延遲操作惰性操作,通俗的講就是在需要的時候才計算結果,而不是一次構建出所有結果。

定義:含有yield語句的函式,返回值為生成器物件。

語法:-- 建立:

def 函式名():

yield 資料

-- 呼叫:

for 變數名 in 函式名():
說明:

-- 呼叫生成器函式將返回乙個生成器物件,不執行函式體。

--  yield翻譯為」產生」或」生成」

執行過程:

呼叫生成器函式會自動建立迭代器物件。

呼叫迭代器物件的__next__()方法時才執行生成器函式。

每次執行到yield語句時返回資料,暫時離開。

待下次呼叫__next__()方法時繼續從離開處繼續執行。

原理:-- 將yield關鍵字以前的**放在next方法中。

-- 將yield關鍵字後面的資料作為next方法的返回值。

示例:

class employee:

def __init__(self, name):

self.name = name

def __str__(self):

return self.name

class employeemanager:

def __init__(self, employees):

self.all_employee = employees

def __iter__(self):

for item in self.all_employee:

yield item

manager = employeemanager([employee("張三"), employee("李四")])

for emp in manager:

print(emp)

語法:

for 變數 in enumerate(可迭代物件):

for 索引, 元素in enumerate(可迭代物件):

作用:遍歷可迭代物件時,可以將索引與元素組合為乙個元組。

語法:for item in zip(可迭代物件1, 可迭代物件2….):

作用:將多個可迭代物件中對應的元素組合成乙個個元組,生成的元組個數由最小的可迭代物件決定。

定義:用推導式形式建立生成器物件。

語法:變數 = ( 表示式 for 變數 in 可迭代物件 [if 真值表示式] )

python之迭代器與生成器

迭代器是乙個可以記住遍歷的位置的物件.迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完,迭代器只能往前,不能退後。迭代器有兩個基本的方法 iter 和next 注意 1.迭代器只能往前取值,不會後退。2.用iter函式可以返回乙個可迭代物件的迭代器。如果乙個函式中包括yield關鍵字,那...

Python之迭代器與生成器

容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否包含在容器中。通常這類資料結構把所有的元素儲存在記憶體中 也有一些特例,並不是所有的元素都放在記憶體,比如迭代器和生成器物件 在python中,常見的容器物件有 從技術角度來說,當它可...

Python之迭代器與生成器

可迭代物件 字面意思分析 可以重複的迭代的實實在在的東西。list,dict keys values items tuple,str,set,range,檔案控制代碼 待定 專業角度 內部含有 iter 方法的物件,就是可迭代物件。內建函式 dir print dir str 判斷乙個物件是否是可迭...