假设我有一个for循环,循环遍历一个生成器,在这个循环中,我正在构建一个列表供以后使用:

q = []
for index, val in enumerate(['a', 'b', 'c']):
    q.append(index+val)

我想保留生成器而不创建如下函数:
def foo(gen):
    for index, val in gen:
        yield index+val

有可能吗?还是有一些我看不到的内在问题?
我想应该是这样的:
iter_q = something()
for index, val in enumerate(['a', 'b', 'c']):
    q.add_iteration(index+val)

好吧,既然我已经写了这篇文章,它看起来确实是不可能的(或无用的),因为这个for循环必须在“generator”准备好之前遍历整个列表,这使得它只是一个预先定义的列表上的迭代器,而不是对象意义上的生成器。
不管怎么说,因为我自己找不到这样的问题。(另外,也许还有人想说些有趣的话)

最佳答案

如果我正确理解你的问题,我想你可能想要一个generator expression

q = (index + val for index, val in enumerate(someOtherGenerator))

该语句创建一个新的生成器q,其工作方式与foo函数返回的生成器相同。您也不需要将其分配给变量,您可以在任何地方创建生成器表达式,例如在函数调用中:
doSomethingWithAGenerator(i+v for i,v in enumerate(someOtherGenerator))

有些生成器无法在生成器表达式中生成,但最常见的生成器可以是。

关于python - 如何使用生成器创建另一个生成器而不定义新函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11867794/

10-13 07:46
查看更多