gpt4 book ai didi

python - 生成器中存储的 'elements' 在哪里?

转载 作者:太空狗 更新时间:2023-10-30 02:16:20 26 4
gpt4 key购买 nike

下面的代码总结了 all_numbers 中列表中的所有数字。这是有道理的,因为所有要汇总的数字都在列表中。

def firstn(n):
'''Returns list number range from 0 to n '''
num, nums = 0, []
while num < n:
nums.append(num)
num += 1
return nums

# all numbers are held in a list which is memory intensive
all_numbers = firstn(100000000)
sum_of_first_n = sum(all_numbers)

# Uses 3.8Gb during processing and 1.9Gb to store variables
# 13.9 seconds to process
sum_of_first_n

将上述函数转换为生成器函数时,我发现使用更少的内存得到了相同的结果(代码下方)。我不明白的是,如果 all_numbers 不包含上面列表中的所有数字,如何总结?

如果数字是按需生成的,那么人们会生成所有数字并将它们汇总在一起,那么这些数字存储在哪里,这如何转化为减少内存使用量?

def firstn(n):
num = 0
while num < n:
yield num
num += 1

# all numbers are held in a generator
all_numbers = firstn(100000000)
sum_of_first_n = sum(all_numbers)

# Uses < 100Mb during processing and to store variables
# 9.4 seconds to process
sum_of_first_n

我了解如何创建生成器函数以及为什么要使用它们,但我不了解它们的工作原理。

最佳答案

生成器 不存储值,您需要将生成器视为具有上下文的函数,它将保存状态并GENERATE 每次要求它这样做时的值,所以,它给你一个值,然后“丢弃”它,保持计算的上下文并等到你要求更多;并且将这样做直到生成器上下文耗尽

def firstn(n):
num = 0
while num < n:
yield num
num += 1

在您提供的这个示例中,使用的“唯一”内存是 num,是存储计算的地方,firstn 生成器保存 num 在其 context 中,直到 while 循环 完成。

关于python - 生成器中存储的 'elements' 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44613936/

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