Python 迭代器和生成器

2021-08-22 07:26:13 字數 2046 閱讀 2446

迭代器  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 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...