生成器

一、什么是生成器?

  在函数内但凡出现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)
原文地址:https://www.cnblogs.com/zhangrenguo/p/12560154.html