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