【发布时间】:2020-02-18 01:13:18
【问题描述】:
我创建了两个枚举方法,一个返回一个列表,另一个返回一个产量/生成器:
def enum_list(sequence, start=0):
lst = []
num = start
for sequence_item in sequence:
lst.append((num, sequence_item))
num += 1
return lst
def enum_generator(sequence, start=0):
num = start
for sequence_item in sequence:
yield (num, sequence_item)
num += 1
关于这个的几个问题:
(1) 将列表更改为生成器就这么简单:
# build via list
l = list()
for item in items:
l.append(item)
# build via iterator
# l = list() (1) <== delete this line
for item in items:
yield item # (2) change l.append(...) to yield ...
(2) “惰性求值”是使用生成器的唯一原因,还是还有其他原因?
【问题讨论】:
-
很难理解你在这里问什么。“将数组(你的意思是列表吗?)更改为生成器”是什么意思?
-
@juanpa.arrivillaga 更新了问题。
-
再说一次,我不太确定你在问什么。生成器是一种语言结构,可让您轻松编写迭代器,其方式通常比使用完整的迭代器协议更容易理解/更具表现力。列表和生成器是两个不同的东西。列表是容器,生成器是迭代器。
标签: python python-3.x generator