Python——生成器
一、特点:生成器只能用于迭代操作。
二、本质:生成器 本质 还是迭代器
三、操作
1、生成函数
def generator(): print(1) yield 'a' #yield必须写到函数里,且不能与return公用 ret = generator() print(ret.__next__()) #1 #a print(ret.__iter__()) #迭代器的数据类型 <generator object generator at 0x0000000002743660>
2、send方法:send 的获取下一个值的效果和 next 基本一致,只不过是在获取下一个值的时候,给上一个值的位置传递一个数值
def generator(): print(123) content = yield 1 print('===',content) print(456) yield 2 g = generator() ret = g.__next__() print(ret) ret = g.send('hello') print(ret)
# 10 20 30 def average(): sum = 0 count = 0 avg = 0 while True: num = yield avg sum += num count += 1 avg = sum / count avg_g = average() avg_g.__next__() avg1 = avg_g.send(10) avg1 = avg_g.send(20) avg1 = avg_g.send(30) print(avg1)
四、列表推导式
#模式一 egg_list = ['鸡蛋%s' %i for i in range(10)] #列表推导式 print(egg_list) #模式二 egg_list = [] for i in range(10): egg_list.append('鸡蛋%s'%i) print(egg_list) #模式三 自己的平方 print ([i*i for i in range(10)])
五、生成器表达式
g = (i for i in range(10)) print(g) for i in g : print(i) #列表推导式 和 生成器表达式 不同 #1、括号不一样 #2、返回值不一样 #3、生成器表达式 几乎不占用内存
六、多种嵌套
#30以内素有能被3整除的数 ret = [i for i in range(30) if i%3 == 0] print (ret) #30以内所有被3整除的数平方 ret = [i*i for i in range(30) if i %3 == 0 ] print(ret)