python 迭代器與生成器1

2022-09-12 23:30:32 字數 2070 閱讀 8538

python-迭代器與生成器1

迭代器與生成器

列表的定義

列表生成式:作用使**更加簡潔

通過列表生成式,我們可以直接建立乙個列表。但是,受到記憶體限制,列表容量肯定是有限的。

而且,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面

幾個元素,那後面絕大多數元素占用的空間都白白浪費了。

所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續

的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊

計算的機制,稱為生成器:generator。

a=[1,2,3]

print

(a)a=[i*2 for i in range(10)] #

也可以是傳乙個函式[fun for i rang(10)]

print

(a)#

其他方式來完成:

a=for i in range(10):

print

(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關鍵字判斷元素是否...