天天看點

Python:生成器generator

Generator

  • 背景:通過清單生成式,我們可以直接建立一個清單。但是,受到記憶體限制,清單容量肯定是有限的。而且,建立一個包含100萬個元素的清單,不僅占用很大的存儲空間,如果我們僅僅需要通路前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。生成器generator應運而生。生成器具有懶惰求值的特性。
  • 方法一:
>>> x=(i for i in range(6))
>>> x
<generator object <genexpr> at 0x7f6129982410>
>>> 
           

隻需要将清單生成式的[]改為(),即可生成generator.

  • 方法二:

利用yield語句生成generator。

def Yh_triangles():
	line=[1]
	while True:
		temp=[]
		yield line
		for i in range(len(line)-1):
			temp.append(line[i]+line[i+1])
		line=[1]+temp+[1]
result=Yh_triangles()
for i in range(10):
	print(next(result))
           

該執行個體是python利用生成器實作楊輝三角形。

包含yield語句的函數,調用該函數時,yield 語句後的表達式的值會組成生成器。本例中也就是yield line。通過生成器自帶的__next__()方法,内置函數next(),以及for循環語句可以周遊生成器。