前一段时间有用到,简单记录下。
-什么是生成器
-生成器的作用
-生成器的常见使用方法
-举个简单例子
什么是生成器
生成器就是一个通过循环计算的表达式,传值用的时候就进行计算。
生成器的作用
就是为了省内存,比如一个列表,有100个值,但是我只需要其中某2,3个值使用,此时就可以根据该列表值间的规律计算我要获取的值,而不需要直接创建一个有100个值的列表
生成器的常见使用方法
直接贴代码感受下:
#第一种方式,使用()方式创建生成器对象
l = (i*i for i in range(3))
print(l) #生成器对象
print(type(l)) #<class 'generator'>--生成器类型
#生成器的读取
print(l.__next__()) #使用__next__()方式读取 值:0
print(next(l)) #使用next()方式读取 值:1
print(next(l)) # 值:3
print(next(l)) #StopIteration 报错,因为已经超出了对象的值范围
#使用循环方式直接获取生成器的值
for j in l:
print(j) #依次打印出:0 1 4
#第二种方式:通过yield返回
def test(n):
for i in range(n):
yield i #相当于一个return,但是返回的是一个生成器对象
print(test(5).__next__())
举个简单例子
就用网上贴的题看看:
def test():
for i in range(4):
yield i
g = test()
def add(a,b):
return a + b
for n in [1,10]:
g = (add(n,i) for i in g)
print(list(g)) #结果为[]
当n=1时:
g = (add(n,i) for i in test()) ----------->生成器的值为[1,2,3,4]
当n=10时(注: 切记,生成器是个表达式,先表达再计算):
g = (add(n,i) for i in (add(n,i) for i in test()))---->生成器的值[20,21,22,23]
---------done-------------