python 基礎 generate生成器

2022-03-27 03:53:48 字數 3177 閱讀 2245

通過列表表示式可以直接生成列表,不過列表一旦生成就需要為所有元素分配記憶體,有時候會很消耗資源。

所以,如果列表元素可以按照某種演算法推算出來,這樣就不必建立完整的list,從而節省大量的記憶體空間。

在python中,這種一邊迴圈一邊計算的機制,稱為生成器(generator)。

法一:

test = range(10)

print

type(test)

#法二:

test = [item for item in range(10)]

print

type(test)

#

test = (item for item in range(10))

print

type(test)

#

生成器是乙個可以自動推導後續元素的物件,為了得到其元素,我們可以直接通過 next() 方法:

test = (item for item in range(10))

print

type(test)

print

test.next()

print

test.next()

print

test.next()##

0#1#

2

另外一種方式是用 for 可以直接迭代生成器的所有元素:

test = (item for item in range(10))

print

type(test)

for item in

test:

print

item##

0#1#

2#3#

4#5#

6#7#

8#9

test = (item for item in range(10))

print

type(test)

print

test.next()

print

test.next()

#至此,生成器中只還有8個元素

for index, item in

enumerate(test):

print index, '='

, item##

0#1#

0 = 2

#1 = 3

#2 = 4

#3 = 5

#4 = 6

#5 = 7

#6 = 8

#7 = 9

如果函式中包含 yield ,那麼該函式就變成了乙個生成器。

函式型別的生成器的特點是:在每次呼叫 next() 的時候執行,遇到 yield 語句就完成乙個元素的推導並返回,再次執行 next() 時從上次返回的 yield 語句處繼續向後執行:

def func():                       def

func():

print

'one

'print

'one

'yield 1 yield 1

print

'two

'print

'two

'yield 2 yield 2

print

'three

'print

'three

'yield 3 yield 3test = func() test =func()

test.next() test.next()

test.next() test.next()

for item in test: for item in

test:

print

item item

#one # one

#two # two

#three # three

#3 # 此時並沒有列印生成器的最後乙個元素值

用生成器產生斐波拉契數列(fibonacci),除第乙個和第二個數外,任意乙個數都可由前兩個數相加得到:

直接列印元素:

def

func(max):

before =0

after = 1

while after print

before

before, after = after, before +after

func(10)#0

#1#1

#2#3

#5

使用列表儲存結果:

def

func(max):

list =

before =0

after = 1

while after before, after = after, before +after

return

list

my_list = func(10)

print

my_list

#[0, 1, 1, 2, 3, 5]

使用生成器:

def

func(max):

before =0

after = 1

while after yield

before

before, after = after, before +after

test = func(10)

print

test

for item in

test:

print

item##

0#1#

1#2#

3#5

Python學習筆記 生成器(Generator)

python學習筆記 生成器 generator 擁有迭代序列的一致方式,比如列表裡的物件或檔案裡的行,是python的一項重要特性。這是通過迭代器協議的方式來完成的,一種生成可迭代物件的通用方式。例如,迭代乙個字典會生成字典鍵構成的集合。當我們書寫for key in mydict語句時,pyth...

Python基礎 Python語法基礎

關鍵字是python語言的關鍵組成部分,不可隨便作為其他物件的識別符號 andas assert break class continue defdel elif else except exec finally forfrom global ifimport inis lambda notor p...

Python程式設計基礎之Python基礎

1.只能是乙個詞 2.包含字母,數字和下劃線 3.不能以數字開頭 this program syas hello and asks for your name print hello world1 print what is your name?ask for their name myname i...