1、处理大量数据
生成器一次返回一个结果,而不是一次返回所有结果。这对于大量数据的计算非常有用。
不用生成器,本地尝试电脑死机():
sum([i for i in range(10000000000000)])
使用用生成器,本地尝试,计算时间比较长,但是没有导致系统死机:
sum(i for i in range(10000000000000))
2、代码更加简洁
示例:求解一个单词在字符串中的位置
不使用生成器
def index_words(text):
results = []
if text:
results.append(0)
for index,letter in enumerate(text,0):
if letter == ' ':
results.append(index+1)
return results
print index_words("The Zen of Python")
使用生成器
def index_words2(text):
if text:
yield 0
for index,letter in enumerate(text,0):
if letter == ' ':
yield index + 1
print(list(index_words2("The Zen of Python")))
对比发现,生成器没有定义result列表变量,也没有append,而是直接yield,代码逻辑更加清晰。