生成器:
在python中,一邊循環一邊計算的機制,稱為生成器:generator。
生成器不會把所有結果全部保存在內存中,而是保存生成的計算規則,每次迭代的時候返回一個計算出來的值,直到遇到Stoplteration異常結束。
創建生成器:
- 生成器表達式:
通過和列表生成式相同的語法來生成,唯一不同只是把列表生成式的[]
換成()
。例:
#生成列表
L=[x*x for x in range(10)]
#生成生成式
g=(x*x for x in range(10))
- 生成器函數:
若函數存在關鍵字yeild,那么該函數就是一個generator函數。例:
#生成斐波那契數列的生成器
def fib():
a,b=0,1
while True:
yield b
temp=b
b=a+b
a=temp
yield和return與generator之間的關系:
-
在一個generator中若沒有return,則默認執行到函數完畢時候返回StopIteration
-
函數執行遇到return,直接拋出Stoplteration且return返回值就是Stoplteration的錯誤信息。
生成器的操作:
-
next()
前面我們說了,生成器保存的是計算出下一個生成值的算法,那么怎么獲取生成的下一個值呢,用next()
函數來獲取生成器的下一個值,當計算出最后一個元素后,若繼續調用,則會報StopIteration的錯誤。
-
for
因為生成器也是一個可迭代對象Interable。
迭代器
可以直接作用于
for
循環的對象統稱為可迭代對象Iterable
可以被next()
調用并不斷返回下一個值的對象稱為迭代器Iterator
迭代器就是可迭代對象,可迭代對象不一定是迭代器,比如list、dict、set
是可迭代對象,但不是迭代器。但是list...
等可迭代對象可以通過itor()
函數轉化為迭代器