![]() |
1
93
另一种选择是使用
从内存使用的角度来看,如果原始迭代可能不会处理所有的项,那么这可能是有益的。 |
![]() |
2
118
发电机不能重绕。您有以下选项:
期权的缺点 1个 是它再次计算值。如果这是CPU密集型的话,你最终会计算两次。另一方面, 二 是仓库。整个值列表将存储在内存中。如果值太多,这可能是不实际的。 所以你有经典的 内存与处理权衡 . 我无法想象一种在不存储值或重新计算值的情况下重绕生成器的方法。 |
![]() |
3
28
|
![]() |
4
24
可能最简单的解决方案是将昂贵的部件包装在一个对象中,并将其传递给生成器:
这样,您就可以缓存昂贵的计算。
如果可以同时将所有结果保存在RAM中,则使用
|
![]() |
5
13
我想为一个老问题提供不同的解决方案
与类似的
|
![]() |
6
5
如果Grzegorzoledzki的回答不够,你可能会使用
更新:另请参见
|
![]() |
7
3
从 official documentation of tee :
所以最好用
|
![]() |
8
3
如果您的生成器在某种意义上是纯的,它的输出只依赖于传递的参数和步骤号,并且您希望结果生成器可以重新启动,那么下面的排序片段可能很方便:
输出:
|
![]() |
9
2
可以定义返回生成器的函数
现在,您可以随心所欲地执行以下操作:
|
![]() |
10
1
没有重置迭代器的选项。迭代器迭代时通常会弹出
正在使用项0到9创建迭代器对象
遍历将弹出的next()函数
将迭代器对象转换为列表
所以项目0已经弹出。当我们将迭代器转换为list时,所有的项都会弹出。
因此,在开始迭代之前,需要将迭代器转换为用于备份的列表。
列表无法转换为迭代器
|
![]() |
11
1
您现在可以使用
通过安装
注意:内存消耗随着迭代器的推进而增加,因此请注意大型iterables。 |
![]() |
12
0
我不知道你所说的昂贵的准备是什么意思,但我想你确实有
如果是这样,为什么不重用呢?
|
![]() |
13
0
好吧,你说你想多次调用一个生成器,但是初始化很昂贵…像这样的东西怎么样?
或者,您可以创建自己的类,该类遵循迭代器协议并定义某种“重置”函数。
https://docs.python.org/2/library/stdtypes.html#iterator-types http://anandology.com/python-practice-book/iterators.html |
![]() |
14
0
使用包装函数处理
|
![]() |
15
-3
它可以由代码对象完成。下面是例子。
一 二 三 4
一 二 三 四 |
![]() |
Mayka · 通过带条件的生成器表达式指定两个变量? 7 年前 |
![]() |
Bram Vanroy · 在列表之间获取唯一的产品并维护输入顺序 7 年前 |
![]() |
David Trinh · js生成器存在异步问题,并承诺不会返回结果 7 年前 |