簡體   English   中英

Python3迭代器與生成器

[英]Python3 Iterators vs generators

我下面有一個程序,我試圖理解迭代器和生成器之間的區別。我知道生成器是一個迭代器more 我感謝生成器是生成迭代器的簡短方法。 但是除了簡潔之外,生成器還提供了其他一些功能,迭代器沒有

def squares(start, stop):
    for i in range(start, stop):
        yield i * i

generator = squares(1, 10)

print(list(generator))


class Squares(object):
    def __init__(self, start, stop):
        self.start = start
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.start >= self.stop:
            raise StopIteration
        current = self.start * self.start
        self.start += 1
        return current


iterator = Squares(1, 10)

l = [next(iterator) for _ in range(1,10)]
print(l)

您發布的兩個示例是等效的。

生成器相對於迭代器(不是生成器)提供的主要優點是生成器使用更少的內存,可以更快,可以在無限流上使用。

使用迭代器時,將最終計算將要返回的所有項目,然后首先返回元素。

使用生成器時,在計算第二項之前返回第一個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM