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 异常,表示停止迭代异常
分类:
python琐碎语法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY