Python3 迭代器和生成器

2022-06-07 02:36:10 字數 3055 閱讀 1314

1.迭代器 iterator

迭代器是乙個可以記住遍歷的位置的物件。

迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

迭代器有兩個基本的方法:iter()next()

list=[1,2,3,4]

it = iter(list) # 建立迭代器物件

for x in it: #next(it)

print (x, end=" ")

一類是集合資料型別,如listtupledictsetstr等;

一類是generator,包括生成器和帶yield的generator function(生成器函式)。

這些可以直接作用於for迴圈的物件統稱為可迭代物件:iterable

可以使用isinstance()判斷乙個物件是否是iterable物件:

>>> from collections.abc import

iterable

>>>isinstance(, iterable)

true

>>>isinstance({}, iterable)

true

生成器都是iterator物件,但listdictstr雖然是iterable,卻不是iterator

listdictstriterable變成iterator可以使用iter()函式:

>>>from collections.abc import iterator

>>>isinstance(iter(), iterator)

true

>>> isinstance(iter('

abc'

), iterator)

true

python的for迴圈本質上就是通過不斷呼叫next()函式實現.

2.生成器

在python中,這種一邊迴圈一邊計算的機制,稱為生成器:generator。

建立generator。第一種方法,只要把乙個列表生成式的改成(),就建立了乙個generator:

>>> g = (x * x for x in range(10))

>>>g

at 0x1022ef630>

>>> next(g) # 通過next()函式獲得generator的下乙個返回值

0>>> next(g)

1#也可用for迴圈來獲取,並且不需要關心stopiteration的錯誤

>>> g = (x * x for x in range(10))

>>> for n in g:

... print(n)

第二種,生成器函式。呼叫乙個生成器函式,返回的是乙個迭代器物件。

在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。

使用 yield 實現斐波那契數列:

#

!/usr/bin/python3

import

sys

def fibonacci(n): #

生成器函式 - 斐波那契

a, b, counter = 0, 1, 0

while

true:

if (counter >n):

return

yield

a a, b = b, a +b

counter += 1f = fibonacci(10) #

f 是乙個迭代器,由生成器返回生成

while

true:

try:

print (next(f), end="")

except

stopiteration:

sys.exit()

yield返回值及給yield傳參,要搞清楚其中的過程

# x=yield 返回值

# 一:

# def dog(name):

# print('道哥%s準備吃東西啦...' %name)

# while true:

# # x拿到的是yield接收到的值

# x = yield # x = '肉包子'

# print('道哥%s吃了 %s' %(name,x))##

# g=dog('alex')

# g.send(none) # 等同於next(g)

## g.send(['一根骨頭','aaa'])

# # g.send('肉包子')

# # g.send('一同泔水')

# # g.close()

# # g.send('1111') # 關閉之後無法傳值

摘錄自python3菜鳥教程和廖雪峰python3

這篇寫得不錯:

迭代器和生成器 python3入門

可迭代的物件 但凡資料型別可以執行 iter iter iter 1,2 iter iter iter open a.txt iter 呼叫可迭代物件的 iter 方法,會得到乙個返回值,該返回值就是迭代器物件 迭代器物件 既內建有 iter 方法,又內建又 next 方法.例如 檔案本身就是迭代器...

Python3 迭代器與生成器

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

python3 迭代器與生成器

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