python3 yield關鍵字簡單使用

2021-10-07 16:28:10 字數 1082 閱讀 1906

yield <==> 生成器

包含yield語句的函式是乙個生成器

生成器每次產生乙個值(yield語句),函式被凍結,被喚醒後再產生乙個值

生成器是乙個不斷產生值的函式

強調文字

強調文字

def gen

(n):

for i in

range

(n):

yield i**

2for i in

gen(5)

:print

(i,' '

, end=

'')

生成器每呼叫一次在yield位置產生乙個值,直到函式執行結束.

輸出

0 1 4 9 16

def gen

(n):

for i in

range

(n):

yield i**

2def square

(n):

return

[j**

2for j in

range

(n)]

for i in

gen(5)

:print

(i,' '

, end='')

print()

for i in

square(5

):print

(i,' '

, end=

'')

輸出結果

0 1 4 9 16

0 1 4 9 16

生成器gen(n)每次只使用乙個儲存單元,不斷的更新;

與生成器相比square(n)函式則是把所有的數都存入列表中,等待使用;

當所需的物件很多時,如n=1m,100m或更大時,很明顯生成器更加節省空間。

以上為個人理解,如有誤請指正

生成器相比一次列出所有內容的優勢:

1.更節省儲存空間

2.響應更迅速

3.使用更靈活

Python的yield關鍵字

忽然得知python有個叫yield的關鍵字,好奇之下去查了查,花了點時間基本弄明白了,故寫在此備忘,順便充充字數。yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行...

python中yield關鍵字

mylist是乙個可迭代的物件。當你使用乙個列表生成式來建立乙個列表的時候,就建立了乙個可迭代的物件 mylist x x for x in range 3 for i in mylist print i 01 4在這裡,所有的值都存在記憶體當中,所以並不適合大量資料 def creategener...

python 理解關鍵字 yield

為了方便追 更新擼了乙個基於scrapy的爬蟲。在實現過程中使用到了yield,網上對其的文字描述都很難讓人理解。通過debug 才了解呼叫順序,進而理解了它使用方法。我們可以用乙個等式來形容其作用 yeild 函式 return 生成器 generator 用同步方式寫非同步 生成器 可迭代的函式...