我一直在尝试将这个生成器函数转换为生成器表达式,但是没有成功。有没有可能用生成器表达式得到相同的输出结果?
def gen5(num):
for i in range(num):
yield i *2
yield i *10
yield i *i
g = gen5(4)
list(g)
[0, 0, 0, 2, 10, 1, 4, 20, 4, 6, 30, 9]
我尝试了以下方法,但输出结果为(无,无,无)。
gen_exp2 = (((yield u*2), (yield u*10) ,(yield u*u)) for u in range(4))
list(gen_exp2)
[0,
0,
0,
(None, None, None),
2,
10,
1,
(None, None, None),
4,
20,
4,
(None, None, None),
6,
30,
9,
(None, None, None)]
我也尝试过这样做,但它返回了4个嵌套的元组而不是上面的列表。
gen_exp3 = (((i*2), (i*10), (i*i)) for i in range(4))
list(gen_exp3)
[(0, 0, 0), (2, 10, 1), (4, 20, 4), (6, 30, 9)]
此外,我如何向生成器表达式添加参数? 非常感谢。
yield
语句,将循环用括号括起来就足够了。 - Delgan(x for i in range(num) for x in (i*2, i*10, i*i))
这个代码可以运行,但是阅读起来很困难。使用itertools.chain.from_iterable((i*2, i*10, i*i) for i in range(num))
会更好一些。 - Patrick Haugh