1.迭代器 iterator
迭代器是乙個可以記住遍歷的位置的物件。
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter()和next()。
list=[1,2,3,4]it = iter(list) # 建立迭代器物件
for x in it: #next(it)
print (x, end=" ")
一類是集合資料型別,如list
、tuple
、dict
、set
、str
等;
一類是generator
,包括生成器和帶yield
的generator function(生成器函式)。
這些可以直接作用於for
迴圈的物件統稱為可迭代物件:iterable
。
可以使用isinstance()
判斷乙個物件是否是iterable
物件:
>>> from collections.abc importiterable
>>>isinstance(, iterable)
true
>>>isinstance({}, iterable)
true
生成器都是iterator
物件,但list
、dict
、str
雖然是iterable
,卻不是iterator
。
把list
、dict
、str
等iterable
變成iterator
可以使用iter()
函式:
>>>from collections.abc import iterator
>>>isinstance(iter(), iterator)true
>>> isinstance(iter('
abc'
), iterator)
true
python的for
迴圈本質上就是通過不斷呼叫next()
函式實現.
2.生成器建立generator。第一種方法,只要把乙個列表生成式的在python中,這種一邊迴圈一邊計算的機制,稱為生成器: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的值。並在下...