生成器:
一邊循環(huán)一邊運算的機制修赞,稱為生成器溯捆,generator
創(chuàng)建生成器方法1
把列表生成式的[]改成()
l=[x for x in range(10)]
print(l)
l=(x for x in range(10))
print(l)
next(l)
可以通過next()函數(shù)獲得生成器的下一個值
生成器保存的是算法,每次調(diào)用 next(l) 吩愧,就計算出 l 的下一個元素的值凡壤,直到計算到最后一個元素,沒有更多的元素時蝶锋,拋出 StopIteration 的異常。一般用for遍歷
創(chuàng)建生成器方法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)
迭代器
迭代器是訪問集合元素的一種方式,呆呆起是一個可以遍歷的位置的對象,迭代對象從集合的第一個元素開始訪問,知道所有的元素被訪問結(jié)束,迭代器只能往前,不會后退
可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器:
???????
可迭代對象
集合數(shù)據(jù)類型
generator
包括生成器和帶yield的generator function
能直接用作于for循環(huán)的對象統(tǒng)稱為可迭代對象.
判斷是否可迭代用isinstance()判斷
生成器不但可以被for循環(huán),還可以被next()函數(shù)不斷調(diào)用并返回下一個值,直到最后拋出Stoplteration異常
iter()函數(shù)
將可迭代對象轉(zhuǎn)化為迭代器
總結(jié)
·凡是可作用于for循環(huán)的對象都是Iterable類型什往;
·凡是可作用于next()函數(shù)的對象都是Iterator類型
優(yōu)點是節(jié)約內(nèi)存