1. 程式人生 > >Python-yield生成器

Python-yield生成器

-s 表達式 print 原理 keyword clas tail while 目的

1.引入生成器的目的:

通常的for...in...循環中,in後面是一個數組,這個數組就是一個可叠代對象,類似的還有鏈表,字符串,文件。它可以是mylist = [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有數據都在內存中,如果有海量數據的話將會非常耗內存

而生成器是可以叠代的,但只可以讀取它一次,用的時候才生成,所以,生成器最大的特點是省內存!

如:for n in range(1000):
a=n

生成含有1000個數的list,占內存多,如果用yield可以實現如下:

def foo(num):

print("starting...")
while num<1000:
num=num+1
yield num
for n in foo(0):
print(n)

2.生成器的用法:

兩個關鍵的方法有:

2.1 next():

前面提到,生成器可以叠代,其能夠叠代的關鍵是它有一個next()方法,工作原理就是通過重復調用next()方法,直到捕獲一個異常,才會結束。

yield 是一個類似 return 的關鍵字,叠代一次遇到yield時就返回yield後面(右邊)的值。重點是:下一次叠代時,是從上一次叠代遇到的yield後面的代碼(下一行)開始執行。

2.2 send():

send(msg)與next()的區別在於send可以傳遞參數給yield表達式,這時傳遞的參數會作為yield表達式的值,而yield的參數是返回給調用者的值,作用等同與return.

其他參考,比較容易理解的見https://blog.csdn.net/mieleizhi0522/article/details/82142856

Python-yield生成器