最专业的网站设计公司有哪些,动画设计电脑配置要求,旅游营销型网站,忠县网站建设立即学习:https://edu.csdn.net/course/play/19711/255579?utm_sourceblogtoedu1.yield return generator
yield是一个返回的是一个生成器对象#xff0c;是通过next函数一次一次地进行函数地迭代来获取结果的#xff0c;而return函数则是将结果返回后#xff0c;不再与…立即学习:https://edu.csdn.net/course/play/19711/255579?utm_sourceblogtoedu1.yield return generator
yield是一个返回的是一个生成器对象是通过next函数一次一次地进行函数地迭代来获取结果的而return函数则是将结果返回后不再与函数有关系了
# #单步生成
#
def gererator():#由于yield的存在使得这个函数是一个生成器print([gererator]yield执行前)yield iterm 1#执行到这行代码后会将值返回并且暂停在此等待下一次next或者send函数的调用再次从这里继续运行注意最后一定需要将结果返回否则会报错StopIteration因为生成器本身就是一个迭代停止了迭代就会报错print([gererator]yield执行后)def main():res gererator()#获取生成器对象print(res)#generator object gererator at 0x0000018503A15930print(next(res))#运行生成器函数打印返回的数据if __name__ __main__:main()generator object gererator at 0x0000016197635930
[gererator]yield执行前
iterm 1# #错误的示例
def gererator():#由于yield的存在使得这个函数是一个生成器print([gererator]yield执行前)yield iterm 1#执行到这行代码后会将值返回并且暂停在此等待下一次next或者send函数的调用再次从这里继续运行注意最后一定需要将结果返回否则会报错StopIteration因为生成器本身就是一个迭代停止了迭代就会报错print([gererator]yield执行后)def main():res gererator()#获取生成器对象print(res)#generator object gererator at 0x0000018503A15930print(next(res))#运行生成器函数打印返回的数据print(next(res))#再次打印会报错因为上面一行代码已经将yield运行结束了所以会使得这行再次运行时没有返回导致停止迭代出错print(*****************)if __name__ __main__:main()从运行的结果可以看出两次使用next函数第一次运行函数遇到yield停止第二次继续在yield处开始运行但是因为没有返回所以代码停在了生成器中即停止了迭代进而在main函数中的 print(*****************)代码也没有执行就直接报错了generator object gererator at 0x0000019059B95480
Traceback (most recent call last):
[gererator]yield执行前File C:/Users/jinlin/Desktop/python_further_study/基础回顾生成器、迭代器等/生成器yield.py, line 39, in module
iterm 1main()
[gererator]yield执行后File C:/Users/jinlin/Desktop/python_further_study/基础回顾生成器、迭代器等/生成器yield.py, line 35, in mainprint(next(res))#再次打印会报错因为上面一行代码已经将yield运行结束了所以会使得这行再次运行时没有返回导致停止迭代出错
StopIteration
# 错误的示例修正send函数使用send函数可以向生成器中发送数据由yield接收
def gererator():#由于yield的存在使得这个函数是一个生成器print([gererator]yield执行前)res yield iterm 1#执行到这行代码后会将值返回并且暂停在此等待下一次next或者send函数的调用再次从这里继续运行注意最后一定需要将结果返回否则会报错StopIteration因为生成器本身就是一个迭代停止了迭代就会报错print([gererator]yield执行后)print([generetor]%s%res)yielddef main():res gererator()#获取生成器对象print(res)#generator object gererator at 0x0000018503A15930print(next(res))#运行生成器函数打印返回的数据res.send(【main】这是由send发送给生成器的数据)print(*****************)if __name__ __main__:main()
generator object gererator at 0x0000021F62065480
[gererator]yield执行前
iterm 1
[gererator]yield执行后
[generetor]【main】这是由send发送给生成器的数据
*****************
import time
#指定迭代的最大次数,可以减少内存的占用
def gererator(maxnum):#由于yield的存在使得这个函数是一个生成器for i in range(1,maxnum):print(************start*****************)yield (迭代数据%s%i)print(************end*****************\n\n)time.sleep(0.5)def main():for i in gererator(50):print(i)if __name__ __main__:main()************start*****************
迭代数据1
************end*****************************start*****************
迭代数据2
************end*****************************start*****************
迭代数据3
************end*****************************start*****************
迭代数据4
************end*****************************start*****************
迭代数据5
************end*****************************start*****************
迭代数据6
************end*****************************start*****************
迭代数据7
************end*****************************start*****************
迭代数据8
************end*****************************start*****************
迭代数据9
************end*****************************start*****************
迭代数据10
************end*****************2.yield from itermable:通过可迭代对象来构造生成器可迭代对象一般有列表、元组、生成器等
def iterator(n101):#迭代器生成一个列表作为可迭代的对象a []for i in range(1,n):a.append(i)return adef generator():#生成器根据列表这个可迭代对象来创建生成器a_list iterator()yield from a_listdef main():#从生成器中打印出数据for i in generator():print(i,end、)if __name__ __main__:main()