python-如何使用生成器创建另一个生成器而不定义新函数?
假设我有一个在生成器上迭代的for循环,在这个循环中我构建了一个列表供以后使用: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
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。