2012-02-09 38 views
1

我對發電機的概念還是有點朦朧。我想創建一個生成器函數,它接受兩個數字數組並在相應的索引處添加值。我有一些工作,我只是不確定我是否正確地使用懶惰評估(即正確使用生成器)來做這件事。有人能告訴我,如果這確實是使用發生器的正確方法,或糾正我,如果我做錯了?Python生成器,添加兩個數組數組:我正確執行這個嗎?

def add(a1,a2): 
    i = 0 
    while i < len(a1): 
     yield a1[i]+a2[i] 
     i += 1 
+6

你的功能名稱打亂了我的大腦。 – sholsapp 2012-02-09 06:42:16

+0

是的...這是早上在這裏很早 – varatis 2012-02-09 06:47:42

回答

5

是的,這是一個完美的發電機。你確定add是個好名字嗎?

zip幫助您寫這更簡潔

def add(a1, a2): 
    for i,j in zip(a1, a2): 
     yield i*j 

你也可以內嵌發電機作爲發電機表達

(i*j for i,j in zip(a1, a2)) 

如果您正在使用Python2你應該使用的itertools.izip代替zip因爲zip在Python2中不是懶惰的

+0

是的,但是我的發電機正確嗎?這就是我想知道的那種 – varatis 2012-02-09 06:46:00

+0

是的,你的語法是正確的,它只是一種單調。 – wim 2012-02-09 06:48:29

+0

'zip()'雖然會失去懶惰。無論如何,如果你打算製作一份完整的清單,那麼沒有必要使用發電機。 – kindall 2012-02-09 07:02:54

0

你可以做到這一點沒有像這樣的指標:

from itertools import izip 

def mult(list1, list2): 
    for item1, item2 in izip(list1, list2): 
     yield item1 + item2 

在Python 3,你不需要import並且可以只使用zip(),如zip()在Python 3

懶但是,是的,你的方式擁有它是大概的概念。