gpt4 book ai didi

Python 生成器 - 改变最后的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:01 25 4
gpt4 key购买 nike

我试图在我的生成器的以下两个定义之间做出决定。哪个更好?哪个“更像 python ”?无论如何,有没有办法减轻每一个的缺点?

def myGenerator1(howMany):
result = [0,0,0]
yield result
for i in range(howMany)
modifyListInPlace(result)
yield result

for val in myGenerator1(1000):
useValThenForgetIt(val)

def myGenerator2(howMany):
result = (0,0,0)
yield result
for i in range(howMany)
result = createNewUpdatedTuple(result)
yield result

for val in myGenerator2(1000):
useValThenForgetIt(val)

第一个修改生成器返回的值,可能会弄乱我尚未预见的调用代码。在这种情况下,第二个产生 1000 个元组的垃圾,如果我增加“howMany”(我可能会这样做),则产生更多。

我给出的循环只是我目前对生成器的使用。我不认为我会保存它产生的值,但它是一种可能在其他地方有用的实用工具。

最佳答案

以标准库为指导,itertools 模块中的组合函数都返回元组,尽管底层算法是就地变异算法。例如,查看 itertools.permutations 的代码.

这种设计(返回元组而不是列表)已被证明是可靠的。我担心变异列表方法会产生一些难以发现的错误,具体取决于调用者对迭代器的返回值所做的操作。

另一个想法。对于未使用的结果,我不会太担心“创建数以千计的垃圾元组”。 Python 的元组实现非常擅长重用以前处理过的元组(通过使用一组空闲列表,它可以从以前使用过的元组创建一个新的元组,而无需调用内存分配器)。因此,元组版本的性能与列表版本一样,甚至更好。

关于Python 生成器 - 改变最后的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8147214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com