如何理解Python关键字yield
答案:2 悬赏:70 手机版
解决时间 2021-03-05 18:48
- 提问者网友:最爱你的唇
- 2021-03-05 13:28
如何理解Python关键字yield
最佳答案
- 五星知识达人网友:从此江山别
- 2021-03-05 14:56
理解迭代的内部机制
迭代是操作可迭代对象(实现了 __iter__()
方法)和迭代器(实现了 __next__()
方法)的过程。可迭代对象是任何你可以从其得到一个迭代器对象的任意对象(译注:调用内建函数iter()),迭代器是能让你在可迭代对象上进行迭代的对象(译注:这里好绕,迭代器实现了 __iter__()
方法,因此它也是一个可迭代对象)。
迭代是操作可迭代对象(实现了 __iter__()
方法)和迭代器(实现了 __next__()
方法)的过程。可迭代对象是任何你可以从其得到一个迭代器对象的任意对象(译注:调用内建函数iter()),迭代器是能让你在可迭代对象上进行迭代的对象(译注:这里好绕,迭代器实现了 __iter__()
方法,因此它也是一个可迭代对象)。
全部回答
- 1楼网友:罪歌
- 2021-03-05 16:31
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关键字返回的
'''
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯