python-迭代器與生成器1
迭代器與生成器
列表的定義
列表生成式:作用使**更加簡潔
通過列表生成式,我們可以直接建立乙個列表。但是,受到記憶體限制,列表容量肯定是有限的。
而且,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面
幾個元素,那後面絕大多數元素占用的空間都白白浪費了。
所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續
的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊
計算的機制,稱為生成器:generator。
a=[1,2,3](a)a=[i*2 for i in range(10)] #
也可以是傳乙個函式[fun for i rang(10)]
(a)#
其他方式來完成:
a=for i in range(10):
(a)列印結果
[1, 2, 3]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
生成器:只有在呼叫時才會生成相應的資料,呼叫哪次就參生哪次。
只記錄當前位置
只有乙個方法_next_();2.7版本用netx();
(i*i for
inin range(10))
例1:斐波那契
deffib(max):
n,a,b=0,0,1
while nprint
(b) a,b=b,a+b
n=n+1
return
"----done______
"fib(10)
列印結果
------------------11
2358
1321
3455例2 斐波那契
deffib(max):
n,a,b=0,0,1
while nprint
(b)
#yield b
a,b=b,a+b #
t=(b,a+b) 是乙個tuple
n=n+1
return
"----done______
"fib(10)
列印結果
------------------11
2358
1321
3455例3:生成器
deffib(max):
n,a,b=0,0,1
while n#print(b)
yield
b a,b=b,a+b #
t=(b,a+b) 是乙個tuple
n=n+1
return
"----done______"#
print(fib(10))
f=fib(10)
print(f.__next__
())print(f.__next__
())列印結果
------------------
11例4:
deffib(max):
n,a,b=0,0,1
while n#print(b)
yield
b a,b=b,a+b #
t=(b,a+b) 是乙個tuple
n=n+1
return
"----done______"#
print(fib(10))
f=fib(10)
print(f.__next__
())print(f.__next__
())print("
*****==」
"開始 "
)列印結果
--------------11
*****==開始 23
581321
3455
Python生成器與迭代器
生成器只有在用的時候會出現在記憶體中,對比列表全部存在記憶體中,減少了記憶體占用 next 函式 依次取生成器的值 s x 2 for x in range 1000 中括號是列表解析,小括號表示生成一系列值,就是生成器 s at 0x7fa20aa8b048 print next s 用next ...
python 迭代器與生成器
迭代器和生成器 print 1 in 1,2,3 print 1 not in 1,2,3 print 4 in print 4 not in 1,2,3 print x not in dlkjfxfei 可迭代物件 iterable 可以被next 函式呼叫並不斷返回下乙個值 知道沒有資料時丟擲s...
Python 迭代器與生成器
一 迭代器 理解迭代器需要搞清楚容器 container 迭代器協議 可迭代物件 iterable 迭代器 iterator 生成器 generator 1 容器 container 容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否...