Python3 迭代器與生成器

2021-08-21 03:46:11 字數 1751 閱讀 8656

迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。

使用iter()定義迭代器,使用next()訪問迭代器的下乙個元素。當迭代器中沒有下乙個元素時,繼續使用next()則會丟擲stopiteration異常。

#author:timax liu

import sys

#宣告迭代器兩種方式

iter1 = [1,2,3,4,5].__iter__()

iter2 =iter([1,2,3,4,5])

#輸出迭代器的記憶體位址

print(iter1, "\n", iter2)

#輸出迭代器中元素

print(iter1.__next__(),"\n",iter2.__next__())

print('\n'.format(next(iter1),next(iter2)))

#遍歷迭代器時,記得要使用try..exsccept捕獲異常例:

while true:

try:

print(iter1.__next__())

except stopiteration:

print('超出元素個數!')

sys.exit()

在python中並不是所有物件都是可迭代物件,可以使用isinstance('物件',iterable),驗證物件是否可迭代

#驗證物件是否可迭代,使用iterable需要先導入

from collections import iterable

obj1 = [1,2,3].__iter__()

obj2 = '123'.__iter__()

obj3 = 000

print(isinstance(obj1,iterable))#true

print(isinstance(obj2,iterable))#true

print(isinstance(obj3,iterable))#false

#驗證是否為迭代器,使用iterator需要先導入

from collections import iterator

print(isinstance(obj2,iterator))#true

print(isinstance(obj3,iterator))#false

在 python 中,使用了 yield 的函式被稱為生成器(generator),由於每次開始都會從上次結束的位置開始,因此也是乙個迭代器。

yield是乙個語法糖,在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。這種運用好處相對於使用一串很大的列表之類的需要開闢過大的記憶體單元,它在使用到多少才開闢多少。

#輸出乙個10位數匯入斐波那契數列

def fibonacci(n):

a,b,counter = 0,1,0

while true:

if(counter > n):

return

yield a

a,b = b,a+b

counter += 1

f = fibonacci(10)

while true:

try:

print(f.__next__())

except stopiteration:

print('超出元素個數!')

break

Python3 迭代器與生成器

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

python3 迭代器與生成器

生成器yield 在python中,使用了yield的函式被稱為生成器 generator 跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。在呼叫生成器的執行過程中,每次遇到yield時函式會暫停並儲存當前所有執行資訊,返回yield的值。並在下...

Python3 迭代器與生成器

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