生成器:
一邊循環一邊運算的機制,稱為生成器,generator
創建生成器方法1
把列表生成式的[]改成()
l=[x for x in range(10)]
print(l)
l=(x for x in range(10))
print(l)
next(l)
可以通過next()函數獲得生成器的下一個值
生成器保存的是算法,每次調用 next(l) ,就計算出 l 的下一個元素的值,直到計算到最后一個元素,沒有更多的元素時,拋出 StopIteration 的異常。一般用for遍歷
創建生成器方法2:
def fib(times):
? ? n = 0
? ? a,b = 0,1
? ? while n
? ? ? ? yield b
? ? ? ? a,b = b,a+b
? ? ? ? n+=1
? ? return 'done'
?F = fib(5)
迭代器
迭代器是訪問集合元素的一種方式,呆呆起是一個可以遍歷的位置的對象,迭代對象從集合的第一個元素開始訪問,知道所有的元素被訪問結束,迭代器只能往前,不會后退
可以被next()函數調用并不斷返回下一個值的對象稱為迭代器:
???????
可迭代對象
集合數據類型
generator
包括生成器和帶yield的generator function
能直接用作于for循環的對象統稱為可迭代對象.
判斷是否可迭代用isinstance()判斷
生成器不但可以被for循環,還可以被next()函數不斷調用并返回下一個值,直到最后拋出Stoplteration異常
iter()函數
將可迭代對象轉化為迭代器
總結
·凡是可作用于for循環的對象都是Iterable類型;
·凡是可作用于next()函數的對象都是Iterator類型
優點是節約內存