每一次對過程的重複稱為一次「迭代」,而每一次迭代得到的結果會作為下一次迭代的初始值。
例如:迴圈獲取容器中的元素。
定義:具有__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 判斷乙個物件是否是可迭...