可迭代物件:
可以直接作用於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...