python中可以节省内存的机制-生成器

nums = [1, 2, 3, 4, 5, 6]
squares_it = (n ** 2 for n in nums)        # squares_it 得到一个生成器,仅在调用时动态生成nums的平方
squares_lst = [
n ** 2 for n in nums] # squares_lst 一次性计算所有元素并生成一个列表并保存下来

所以,当您这样做时:

for n in squares_it:
    print(n)

就像你在做:

for n in nums:
    print(n ** 2)

但是当你这样做的时候:

for n in squares_lst:
    print(n)

就像你在做:

squares_lst = []
for n in nums:
    squares_lst.append(n ** 2)
for n in squares_lst:
    print(n)

如果您不需要(或没有)列表 nums,那么您可以使用以下方法节省更多空间:

squares_it = (n ** 2 for n in xrange(1, 7))

此外,生成器和迭代器可能会产生无限数量的元素。一个例子是 itertools.count()产生 0, 1, 2, 3, ... 永无止境。

 

参考:https://www.coder.work/article/1278613

posted on 2023-06-04 23:20  呼延灼  阅读(17)  评论(0编辑  收藏  举报

导航