Python 生成器語法

2021-09-23 22:15:00 字數 3022 閱讀 1527

通過列表生成式,我們可以直接建立乙個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。

所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊計算的機制,稱為生成器:generator

import sys

def main()

: f =

[x for x in

range(1

,10)]

print

(f) f =

[x*x for x in

range(10

)]print

(sys.

getsizeof

(f)) # 檢視物件占用記憶體的位元組數

print

(f) f =

(x*x for x in

range(10

))print

(sys.

getsizeof

(f)) # 生成器不占用儲存資料的空間

print

(f)for val in f:

print

(val)

if __name__ ==

'__main__'

:main

()

>>>

next

(g)0

>>>

next

(g)1

>>>

next

(g)4

>>>

next

(g)9

>>>

next

(g)16

>>>

next

(g)25

>>>

next

(g)36

>>>

next

(g)49

>>>

next

(g)64

>>>

next

(g)81

>>>

next

(g)traceback

(most recent call last)

: file ""

, line 1,in

stopiteration

// 生成乙個斐波那契數列

def fib

(n):

a,b =0,

1for _ in

range

(n):

a,b = b,a+b

yield a

def main()

:for val in

fib(20)

:print

(val)

if __name__ ==

'__main__'

:main

()

函式是順序執行,遇到return語句或者最後一行函式語句就返回。而變成generator的函式,在每次呼叫next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

楊輝三角定義如下:

1

/ \1 1

/ \ / \

1 2 1

/ \ / \ / \

1 3 3 1

//期待輸出:

//[1]

//[1, 1]

//[1, 2, 1]

//[1, 3, 3, 1]

//[1, 4, 6, 4, 1]

//[1, 5, 10, 10, 5, 1]

//[1, 6, 15, 20, 15, 6, 1]

//[1, 7, 21, 35, 35, 21, 7, 1]

//[1, 8, 28, 56, 70, 56, 28, 8, 1]

//[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

def ********s

(n):

l,index =[1

],0while index < n:

yield l

l =[1

]+[l[i]

+l[i+1]

for i in

range

(len

(l)-1)

]+[1

] index +=1

n =0

results =

for t in

********s(10

):print

(t) results.

(t) n = n +

1if n ==10:

break

if results ==[[

1],[

1,1]

,[1,

2,1]

,[1,

3,3,

1],[

1,4,

6,4,

1],[

1,5,

10,10,

5,1]

,[1,

6,15,

20,15,

6,1]

,[1,

7,21,

35,35,

21,7,

1],[

1,8,

28,56,

70,56,

28,8,

1],[

1,9,

36,84,

126,

126,84,

36,9,

1]]:

print

('測試通過!'

)else

:print

('測試失敗!'

)

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...

python生成器好處 Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...