python中yield关键字

yield 就是保存当前程序执行状态。
yield可以简单理解为return操作,但和return又有很大的区别。
执行完return,当前函数就终止了,函数内部的所有数据、内存空间,全部都没有了
yield在返回数据的同时,还保存了当前的执行内容,当你再一次调用这个函数时,他会找到你在此函数中的yield关键字,然后从yield的下一句开始执行
用 yield 的函数,好处是不用一次计算所有元素,而是用一次算一次。
当有多个返回值时,用 return 全部一起返回了,需要单个逐一返回时可以用 yield。
带有yield的函数在Python中被称之为generator(生成器)

只要在def函数里面看到有 yield 关键字那么就是生成器

def generator():
    for i in range(1, 5):
        print('<----开始生成')
        yield i
        print('完成一次----->')


gen = generator()
print(next(gen))  # 函数第一次调用next(gen)函数时,generator函数从开始执行到yield,并返回yield的值。
print(next(gen))  # 在函数第二次调用next(gen)函数时,generator函数从上一次yield结束的地方继续运行(下一次循环),直至下一次执行到yield的地方,并返回yield的值
print(next(gen))

  

命令行执行 next指令如下:(注意上一次结束的地方和下一次开始的地方)

>>> print(next(gen))
<----开始生成
1
>>> print(next(gen)) 完成一次-----> <----开始生成 2
>>> print(next(gen)) 完成一次-----> <----开始生成 3
>>> print(next(gen)) 完成一次-----> <----开始生成 4
>>> print(next(gen)) 完成一次-----> Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> print(next(gen)) StopIteration print(next(gen))

  

 生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个StopIteration 异常,表示停止迭代异常

posted @ 2023-05-26 09:10  sangern  阅读(33)  评论(0编辑  收藏  举报