利用 () 建立generator:
>>> a = [x*x for x in range(10)] #列表生成式
>>> a
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> b = (x*x for x in range(10)) #用 () 建立乙個generator
>>> b
at 0x7f62455db258>
>>> next(b) #利用 next()呼叫,一次只計算乙個值
0>>> next(b)
1>>>
for y in b: #利用for遍歷generator,比較常用
... print(y)
... 49
1625
3649
6481
>>>
當函式定義中含有yield
關鍵字時,該函式就是乙個generator,以斐波拉契數列為例:
>>>
deffib
(max):
... n, a, b = 0, 0, 1
...
while n < max:
...
yield b #yield關鍵字
... a, b = b, a + b
... n = n + 1
...
>>> f = fib(10)
>>> f #generator型別
0x7f62455db360>
>>>
for x in f:
... print(x)
... 11
2358
1321
3455
for x in [1, 2, 3, 4, 5]:
pass
實際上完全等價於:
# 首先獲得iterator物件:
it = iter([1, 2, 3, 4, 5])
# 迴圈:
while
true:
try:
# 獲得下乙個值:
x = next(it)
except stopiteration:
# 遇到stopiteration就退出迴圈
break
以上內容摘抄自于廖雪峰的官方**-python教程
python之迭代器 生成器
迭代器 迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器提供了統一的訪問集合的介面,只要定義 iter 方法物件,就可以使用迭代器訪問。迭代器有兩個基本的方法 iter 方法 返回迭代器物件本身 按我自己比較土的理解方法就是,每呼叫一次iter...
Python之生成器 迭代器
生成器類似返回值為陣列的乙個函式,這個函式可以接受引數,可被呼叫,但只能產生乙個值,所以大大節省記憶體。生成器表示式的語法非常簡單,只需要將列表推導式的中括號改成小括號就可以了 1 x x for x in range 10 if x 2 0 會列印出整個列表 0,4,8,12,16 1 x x f...
Python 迭代器 生成器
可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...