生成器

一、生成器成yield

若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象。

生成器内置有__iter__和__next__方法,所以生成器本身就是一个迭代器

因而我们可以用next(生成器)触发生成器所对应函数的执行。

def func():
    print('第一次')
    yield 1
    print('第二次')
    yield 2
    print('第三次')
    yield 3
    print('第四次')


# g=func()
# print(g)
# 生成器就是迭代器
# g.__iter__()
# g.__next__()

会触发函数体代码的运行,然后遇到yield停下来,将yield后的值当做本次调用的结果返回

# 应用案列
def my_range(start,stop,step=1):
    # print('start...')
    while start < stop:
        yield start
        start+=step
    # print('end....')


# g=my_range(1,5,2) # 1 3
# print(next(g))
# print(next(g))
# print(next(g))

for n in my_range(1,7,2):
    print(n)

 

总结yield:

有了yield关键字,我们就有了一种自定义迭代器的实现方式。Yield可以用于返回值,但不同于return,函数一旦遇到return就结束了,而yield可以保存函数的运行状态挂起函数,用来返回多次值

原文地址:https://www.cnblogs.com/acnjanna2019/p/12559456.html