【发布时间】:2020-02-10 01:10:06
【问题描述】:
在下面的代码中,i1 是一个迭代器。
def sq(x):
y = []
for i in x:
y.append(i**2)
return y
l1 = range(5)
s1 = sq(l1)
i1 = iter(s1)
我可以为相同的平方运算编写一个生成器。在下面的代码中,g1 是一个生成器。
def sqg(x):
for i in x:
yield i**2
g1 = sqg(l1)
我知道生成器使用更少的代码并且更易于读写。我知道生成器也运行得更快,因为它们保持本地状态。
使用i1 比使用g1 有什么优势吗?
【问题讨论】:
-
请注意,在第一个中您严格地创建了一个完整的列表,而在第二个中您不是。您是在谈论一般的优势,还是特别在这种情况下?这将取决于具体的用例以及您已经拥有哪些数据。
-
生成器是迭代器。很难说你到底在问什么。
-
@Carcigenicate 我问的是一般的优势。我提供这个例子是为了有一些具体的参考。如果笼统地说太难了,我们来谈谈这个特殊情况。
-
@juanpa.arrivillaga 是的,你是对的:生成器是迭代器的子集。我指的是非生成器迭代器。非生成器迭代器与生成器相比有什么优势吗?我已经相应地修改了我的问题。