2012-02-09 32 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

懒但是,是的,你的方式拥有它是大概的概念。