生成器(generator)
一、生成器的概念
生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写
__iter__()
和__next__()
方法了, 只需要一个yiled
关键字。 生成器一定是迭代器(反之不成立)
二、定义一个生成器
函数执行过程中遇到
yield
就会停止继续往下执行并且会记住当前执行的位置,等到下一次执行的时候继续往下执行
1、定义一个迭代器函数
def foo(): print('---第一个值---') yield 1 print('---第二个值---') yield 2 print('---第三个值---') yield 3 print('---第四个值---') yield 4 print('---第五个值---') yield 5
2、使用
if __name__ == '__main__': f = foo() # 查询类型是一个generator的类 print(type(f)) # 打印出来的仅仅是一个generator的内存地址 print(f) # 打印值(下面两种方式随便那种) print(f.__next__()) print(next(f))
三、迭代器的协程
所谓的协程就是,从外面可以发送参数给生成器(
generator
中)
1、实现代码
def foo(): list1 = [] while True: s1 = yield list1 print('第一个参数:{0}'.format(s1)) list1.append(s1) print(list1) if __name__ == "__main__": f = foo() print(f.send(None)) f.send('你好') f.send('hello')
- 解说
- 1.对于表达式形式的
yield
,在使用时,第一次必须传None
,f.send(None)
等同于next(f)
- 1.对于表达式形式的