生成器是用来创建迭代器的工具,其写法与标准函数类似,不同之处在于返回时使用 yield
语句,关于 yield
,我们在Python 爬虫(六):Scrapy 爬取景区信息中已经作了一些介绍,我们再来熟悉一下:
yield 是一个关键字,作用和 return 差不多,差别在于 yield 返回的是一个生成器(在 Python 中,一边循环一边计算的机制,称为生成器),它的作用是:有利于减小服务器资源,在列表中所有数据存入内存,而生成器相当于一种方法而不是具体的信息,用多少取多少,占用内存小。
生成器的创建方式有很多种,比如:使用 yield
语句、生成器表达式(可以简单的理解为是将列表的 []
换成了 ()
,特点是更加简洁,但不够灵活)。看下示例:
示例 1
def reverse(data): for i in range(len(data)-1, -1, -1): yield data[i] for char in reverse('Hello'): print(char)
执行结果:
o l l e H
示例 2
# 列表 lis = [x*x for x in range(5)] print(lis) # 生成器 gen = (x*x for x in range(5)) for g in gen: print(g)
执行结果:
[0, 1, 4, 9, 16] 0 1 4 9 16