1
我需要構建由兩個或多個發電機功能實時產生的輸出的笛卡爾乘積。
我希望itertools.product不要阻塞,而是在生成器輸入函數引發StopIteration之前爲mr提供第一個產品元素。
有沒有提供這樣的功能?當使用發電機作爲參數時,itertools產品塊
我寫了一個簡單的程序來證明我的問題:
#!/usr/bin/python
import time
import itertools
def g_delay(l, delay):
for i in range(l):
yield i
time.sleep(delay)
def g(l):
for i in range(l):
yield i
if __name__ == "__main__":
start_time = time.time()
p = itertools.product(g_delay(2,1), g_delay(3,1))
elapsed_time = time.time() - start_time
print '%f' % elapsed_time
for i in p:
print i
print
start_time = time.time()
p = itertools.product(g(2), g(3))
elapsed_time = time.time() - start_time
print '%f' % elapsed_time
for i in p:
print i
和輸出:
5.004710
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
0.000017
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
我想吃點什麼,結果是,中5.004710秒第一延遲類似於後者(0.000017),並且在訪問產品元素時發生阻塞(在for循環中)。
你做*不*需要在一個生成器函數中引發StopIteration; Python爲你照顧。 –
我真的不知道你想要實現什麼...... –
謝謝我不知道 – user3248533