迭代器 iterator
什麼是迭代器
迭代器是訪問可迭代物件的一種方式,用迭代器可以訪問可迭代物件
迭代器是指iter(可迭代物件) 返回的物件
迭代器可以用next(it)函式獲取可迭代物件的資料
迭代器函式 iter 和 next
iter(iterable) 從可迭代物件中返回乙個迭代器,iterable必須是能提供乙個迭代器的物件
next(iterator) 從迭代器iteraror中獲取下乙個記錄,如果無法獲取下一條記錄,則觸發stopiterator異常
迭代器說明:
迭代器只能往前取值,不會後退
用iter函式可以返回乙個可迭代物件的迭代器
可迭代物件可以生成乙個迭代器
iterable:可迭代的物件
iterator:迭代器
示例:
l=[2,3,5,7]
it=iter(l) #用iter返回乙個迭代器用it繫結
next(it) #2 #用next(it) 用迭代器來獲取l中的元素
next(it) #3
next(it) #5
next(it) #7
next(it) #stopiteration #通知next呼叫者,已無資料
iter函式通常和可迭代物件(iterable)組合使用,返回乙個迭代器,此迭代器相當於乙個第三方的容器,此時的it就是第三方容器,只訪問可迭代物件,供next函式獲取其中的值
next函式通常和迭代器(第三方容器)組合使用,返回可迭代物件中的數值
示例二:
it=iter(range(1,10,3))
next(it)
next(it) # 2
next(it) # 3
next(it) # 5
next(it) # 7
next(it) # stopiteration
用while語句訪問可迭代物件資料:
l=[2,3,5,7]
it=iter(l)
while true:
try:
x = next(it)
print(x)
except stopiteration:
break
生成器 generator (python 2.5及之後的版本)
什麼是生成器:
生成器是能夠動態提供資料的物件,生成器物件也是可迭代物件
靜態提供資料:是指原來就有這個資料,直接從裡面拿資料的方法稱為靜態提供資料
例如:
l=[2,3,4,5] #已存在的資料
for x in l:
print(x) #此時的x就是靜態拿資料
動態提供資料:是指現用現生成的資料,這個資料不占用計算機的記憶體,用完就會釋放掉
例如:
for i in range(100):
print(i) #此時的i是動態提取資料,該資料原來不存在,現用現生成的,用完就會釋放,不會占用計算機記憶體
生成器有兩種:
生成器函式
生成器表示式
生成器函式定義:
含有yield語句的函式是生成器函式,此函式被呼叫將返回乙個生成器物件
yield 翻譯為:產生或生成
yield語句:
語法:yield 表示式
說明:yield 用於def函式中,目的是將此函式作為生成器函式使用
yield 用來生成資料,供next(it)函式使用
示例:
def myyield(): #此函式為生成器函式
yield 4
yield 5
yield 6
yield 7
print("生成器函式呼叫結束")
gen=myyield()
# print(gen) # gen繫結生成器物件,此物件為可迭代物件
for x in gen:
print(x)
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...
Python迭代器和生成器
迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...
python 迭代器和生成器
迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...