生成器
一、什么是生成器?
在函数内但凡出现yield关键字,再调用函数就不会执行函数体代码,会返回一个值,该值称之为生成器,这个生成器本质就是迭代器。
def func(): print('first') yield print('second') yield print('third') yield res1 = func() print(res1) res1.__iter__() res1.__next__()
二、为什么要有生成器
生成器是一种自定义迭代器的方式。
三、如何用生成器?
1、有__iter__方法-->iter()
2、__next__方法-->next()
3、for循环
# def func(): # print('first') # yield 1 #暂停 # print('second') # yield 2 # print('third') # yield 3 # # res = func() # print(res) # print(res.__iter__().__iter__() is res) # # res.__next__() # # next(res) #next会触发函数的从头开始的执行,碰到yield就停掉了。 # res1 = next(res) #next拿到返回值兵赋值给res1,当做第一次取值,函数并且暂停到这个位置 # print('第一次的返回值',res1) # def func(): # yield 1 # yield 2 # yield 3 # # res = func() # print(next(res)) # print(next(res)) # print(next(res)) # # print(next(res)) #取不到值会报错 # def func(): print('first') yield 1 #暂停 print('second') yield 2 print('third') yield 3 res = func() for item in res: #for循环会先调用res的iter()方法拿到迭代器对象,然后会next()一次res,把结果给item,运行一次否循环的循环体 # pass print(item)