python-如何使用生成器创建另一个生成器而不定义新函数?

python-如何使用生成器创建另一个生成器而不定义新函数?,python,generator,Python,Generator,假设我有一个在生成器上迭代的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

假设我有一个在生成器上迭代的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循环必须在生成器准备好之前遍历整个列表,这使得它只是一个对预制列表的迭代器,而不是对象有用意义上的生成器


不管怎么说,我都会发帖,因为我自己找不到这样的问题。另外,也许有人对它还有一些有趣的话要说

我这样看待它:它可能是类中最好的函数在迭代器上循环,同时假装没有耗尽它的例子。它最终创建了整个事物的完整副本。如果itertools不能做得更好,那么可能就没有其他通用解决方案了。

我这样看待它:它可能是类中最好的函数在迭代器上循环,同时假装没有耗尽它的例子。它最终创建了整个事物的完整副本。如果itertools不能做得更好,那么可能没有其他通用解决方案。

如果我正确理解了您的问题,我想您可能需要一个:

该语句创建一个新的生成器q,它的工作方式与foo函数返回的生成器相同。您也不需要将其分配给变量,您可以在任意位置创建生成器表达式,例如在函数调用中:

doSomethingWithAGenerator(i+v for i,v in enumerate(someOtherGenerator))

有几种生成器无法在生成器表达式中生成,但最常见的一种是。

如果我正确理解了您的问题,我想您可能需要一个:

该语句创建一个新的生成器q,它的工作方式与foo函数返回的生成器相同。您也不需要将其分配给变量,您可以在任意位置创建生成器表达式,例如在函数调用中:

doSomethingWithAGenerator(i+v for i,v in enumerate(someOtherGenerator))

有些类型的生成器不能在生成器表达式中生成,但最常见的类型可以。

保留生成器是什么意思?你看过吗?特别是itertools.cycle或itertools.repeat。你说的抓住发电机是什么意思?你看过吗?特别是itertools.cycle或itertools.repeat。