我对发电机的概念还是有点朦胧。我想创建一个生成器函数,它接受两个数字数组并在相应的索引处添加值。我有一些工作,我只是不确定我是否正确地使用懒惰评估(即正确使用生成器)来做这件事。有人能告诉我,如果这确实是使用发生器的正确方法,或纠正我,如果我做错了?Python生成器,添加两个数组数组:我正确执行这个吗?
def add(a1,a2):
i = 0
while i < len(a1):
yield a1[i]+a2[i]
i += 1
我对发电机的概念还是有点朦胧。我想创建一个生成器函数,它接受两个数字数组并在相应的索引处添加值。我有一些工作,我只是不确定我是否正确地使用懒惰评估(即正确使用生成器)来做这件事。有人能告诉我,如果这确实是使用发生器的正确方法,或纠正我,如果我做错了?Python生成器,添加两个数组数组:我正确执行这个吗?
def add(a1,a2):
i = 0
while i < len(a1):
yield a1[i]+a2[i]
i += 1
是的,这是一个完美的发电机。你确定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中不是懒惰的
你可以做到这一点没有像这样的指标:
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
懒但是,是的,你的方式拥有它是大概的概念。
你的功能名称打乱了我的大脑。 – sholsapp 2012-02-09 06:42:16
是的...这是早上在这里很早 – varatis 2012-02-09 06:47:42