生成器:generator,需要的时候才产生结果,而不是立即产生结果。
生成器的底层是使用迭代器来实现的。
生成器比迭代器的使用更加的灵活。
#需求:构造一个包含100万条数据的列表
#方式一:
list=[]
for i in range(1000000):
list.append(i)
#这种方式数据都存储在内存中,当数据量较大时,容易卡,容易造成内存异常。
#方式二 列表推导式
list2=[i for i in range(1000000)]
#跟方式一一样,只是不同的表达式
#方式三:迭代器
it=iter(range(1000000))
#占用内存很小,只有在使用时才会产生数据。
#方式四:定义生成器
#跟列表推导式相似,区别在于将列表推导式里的中括号变成小括号
gen = (i for i in range(1000000))
gen.__next__()
定义生成器:
方式一:使用小括号的方式,类似于列表推导式,只是将列表推导式里的中括号换成小括号。
方式二:使用生成器函数去定义,是一个带有特殊关键字yield的函数。
return和yield都可以返回值。
list=[]
def f(n):
for i in range(n):
list.append(i)
return list
def f2(n):
for i in range(n):
yield i