python中yield关键字

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

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

1
2
3
4
5
6
7
8
9
10
11
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指令如下:(注意上一次结束的地方和下一次开始的地方)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> 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 @   sangern  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示