迭代器與生成器

2021-08-15 08:40:10 字數 1876 閱讀 3945

可迭代物件:

可以直接作用於for迴圈的物件

統稱為可迭代物件(返回迭代器的物件)

,即iterable。

# 一是集合資料型別,如list、tuple、dict、set、str等;

# 二是generator,包括生成器和帶yield的generator function。

容器:簡單來說

容器是一系列元素的集合

容器是一種把多個

可以逐個地迭代獲取

的元素組織在一起並儲存在記憶體

中的資料結構;

可以用in,not in關鍵字判斷元素是否包含在容器中。

(並不是所有的元素都放在記憶體,比如迭代器和生成器物件)

在python中,常見的

容器物件

有:list.dict.tupe.set.str

迭代器:

任何實現了__iter____next__()方法的物件都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下乙個值,如果容器中沒有更多元素了,則丟擲stopiteration異常,

la=[1,2,3,4]

# for i in la: for迴圈

# print(i)結果:1 2 3 4

print(next(la))

print(next(la))

print(next(la)) 結果typeerror: 'list' object is not an iterator#可迭代物件不一定是迭代器

la=[1,2,3]

print(type(la)) 結果la=iter(la) #通過iter()函式可以把可迭代物件轉換成迭代器

print(type(la)) 結果print(next(la))

print(next(la))

print(next(la))

print(next(la)) 結果stopiteration

生成器其實是一種特殊的迭代器,不過這種迭代器更加優雅。

它不需要再像上面的類一樣寫__iter__()__next__()方法,只需要乙個yiled關鍵字。

因此任何生成器也是以

一種懶載入的模式生成值。

#iter(可迭代物件) ===> 迭代器-->iterator。

#迭代器內部持有乙個狀態,該狀態用於記錄當前迭代所在的位置,

#以方便下次迭代的時候獲取正確的元素

#斐波那契(fibonacci)演示 迭代器 和 生成器

def fab(max):

n,a,b=0,0,1

while n#yeild將b轉換為生成器物件,

a,b=b,a+b

n=n+1;

#沒有return

#生成器一定是迭代器,反之不成立

l= fab(10) #l表示生成器

for i in l:

print(i)

#可迭代類

class fab(object):

def __init__(self,max):

self.max=max;

self.n,self.a,self.b=0,0,1;

def __iter__(self):#迭代器生成方式:1、iter()將可迭代物件轉化成迭代器

return self; # 2、實現iter()和next()兩個函式

def __next__(self):

if self.n

生成器與迭代器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...

生成器與迭代器

通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...

迭代器與生成器

首先講述一下如何判斷物件是否可迭代,使用的命令為 from collections import iterable print isinstance 123,iterable 如果123是可迭代資料,則輸出ture,如果不是,則輸出false。建立乙個自己的列表 class mylist objec...