永发信息网

如何理解Python关键字yield

答案:2  悬赏:70  手机版
解决时间 2021-03-05 18:48
如何理解Python关键字yield
最佳答案
理解迭代的内部机制

迭代是操作可迭代对象(实现了 __iter__()
方法)和迭代器(实现了 __next__()
方法)的过程。可迭代对象是任何你可以从其得到一个迭代器对象的任意对象(译注:调用内建函数iter()),迭代器是能让你在可迭代对象上进行迭代的对象(译注:这里好绕,迭代器实现了 __iter__()
方法,因此它也是一个可迭代对象)。
全部回答
yield是python中定义为生成器函数,其本质是封装了  __iter__和__next__方法   的迭代器; 与return返回的区别:return只能返回一次值,函数就终止了,而yield能多次返回值,每次返回都会将函数暂停,下一次next会从上一次暂停的位置继续执行; 以下用示例说明: def test(a,b):    print("from test(),a+b=%d" %(a+b))    return("我是return返回的") def test_yield(a,b): #函数体中有yield关键字,函数就可以称为生成器函数    print("from test_yield,a+b=%d" %(a+b))    yield("我是第一次碰到yield关键字返回的") #程序运行时碰到yield,退出函数体并记录位置,下次调用跳过之前运行的代码    print("from test_yield,a*2=%d" %(a*2))    yield("我是第二次调用碰到yield关键字返回的") print(test(11,33)) g = test_yield(11,33) print(next(g)) #通过next()调用生成器函数 print(next(g)) #第二次调用生成器函数 ''' 执行结果: from test(),a+b=44 我是return返回的 from test_yield,a+b=44 我是第一次碰到yield关键字返回的 from test_yield,a*2=22 我是第二次调用碰到yield关键字返回的 '''
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
发展农产品加工业,要立足于现有生产能力的结
宝莱佳家私在什么地方啊,我要过去处理事情
皆因未入赋而系的翻译
佳通汽车租赁这个地址在什么地方,我要处理点
在淘宝买的衣服付款记录删掉了。怎么找回来手
已知向量组a1,a2,a3线性无关,从定义出发证明
360帐号一定要手机号注册了?
性能监视器和SQL Server Profile 的功能和用
在性染色体上分不分纯杂合子
我喜欢的女生要辞职了求救
攒不住钱怎么办
科诺手机连锁地址有知道的么?有点事想过去
5173里的单件数量是什么 比如说我卖1000万游
艾灸一般什么时间最好
恒大新城养生堂汗蒸会所这个地址在什么地方,
推荐资讯
Who know the scene or incident from the mo
车牌惠是哪个省的标志
我打乒乓球的时候听说nba季后赛我不知道怎么
取消双标后,AE白/经典白之类的最有可能配哪
个性励志的名言
崇光大酒店停车场地址有知道的么?有点事想过
r7000smart connect怎么关闭
在商品房面积计算中,公用建筑面积分摊系数K
中考完,根据我的情况,是上高中还是上中专?
大闸蟹网箱养殖
人之常情的情侣网名叫什么?_?
奎元中英文学校在什么地方啊,我要过去处理事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?