python3学习笔记10(迭代器和生成器)
參考http://www.runoob.com/python3/python3-iterator-generator.html
迭代器
迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。
迭代器有兩個基本的方法:iter()?和?next()。
字符串,列表或元組對象都可用于創(chuàng)建迭代器:
list = [1,2,3,4]it = iter(list) # 創(chuàng)建迭代器對象
print(next(it)) # 輸出迭代器的下一個元素
print(next(it))
創(chuàng)建一個迭代器
把一個類作為一個迭代器使用需要在類中實現(xiàn)兩個方法__iter__(),__next__()。python中構造函數(shù)為 __init__(),它會在對象初始化的時候執(zhí)行。
__iter__()方法返回一個特殊的迭代器對象,這個迭代器對象實現(xiàn)了__next__()方法并通過StopIteration異常標識迭代的完成。
__next__()方法(Python2里是next())返回下一個迭代器對象。
StopIteration
StopIteration 異常用于標識迭代的完成,防止出現(xiàn)無限循環(huán)的情況,在 __next__() 方法中我們可以設置在完成指定循環(huán)次數(shù)后觸發(fā) StopIteration 異常來結束迭代。
class MyNumbers:def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <=20: #在 20 次迭代后停止執(zhí)行
x = self.a
self.a += 1
return x
else:
raise StopIteration #防止出現(xiàn)無限循環(huán)的情況
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
生成器
使用了yield的函數(shù)被稱為生成器(generator)。
跟普通函數(shù)不同的是,生成器是一個返回迭代器的函數(shù),只能用于迭代操作,更簡單點理解生成器就是一個迭代器。
在調(diào)用生成器運行的過程中,每次遇到 yield 時函數(shù)會暫停并保存當前所有的運行信息,返回 yield 的值, 并在下一次執(zhí)行 next() 方法時從當前位置繼續(xù)運行。調(diào)用一個生成器函數(shù),返回的是一個迭代器對象。
#!/usr/bin/python3import sys
def fibonacci(n): #生成器函數(shù)--菲薄那契qi
a,b,counter = 0,1,0
while True:
if (counter > n):
return
yield a
a, b = b, a+b
counter += 1
f = fibonacci(10) #f是一個迭代器,由生成器返回生成
while True:
try:
print(next(f),end = " ")
except StopIteration:
sys.exit()
轉(zhuǎn)載于:https://www.cnblogs.com/hc1hr2/p/10232921.html
總結
以上是生活随笔為你收集整理的python3学习笔记10(迭代器和生成器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery分页插件
- 下一篇: MINIST深度学习识别:python全