零基础-一起学爬虫

【零基础学爬虫】python中的yield详解

2019-03-25  本文已影响4人  大菜鸟_

python中的yield功能比较强大,什么意思呢?如果一个函数f内使用了yield关键词,那么该函数就可以这样使用:

for item in f(***):
    ****

也就是包含yield关键词的函数可以在for循环中迭代,说到迭代第一印象是包含很多个元素才可以迭代,确实如此。举个更加详细的案例:
需求:

这是yield出来拯救世界了:

def getSeq(num):
    index = 1;
    while index<num:
       yield index
        index = index+1

调用方法:

for i in getSeq(1000000):
    pass

上述代码运行时,for中调用了getSeq,执行该函数时,遇到yield index时会将index的值返回,并且函数暂停在yield语句的位置,下次再调用getSequence时,将继续从上次暂停的位置开始运行,直到遇到yield关键词时又将index的值返回,一直这样循环

yield的作用也就是:当执行到yield关键词的代码时,函数会暂时返回,下次调用该函数时,会从上次暂停的地方继续运行,yield起到一个暂时返回的作用,有点像return。

另外,yield其实可以有返回值,也可以从外界改变yield的返回值:

def getSeq(num):
    index = 1
    while index<num:
        res = yield index
        print('res = '+str(res)+'\n')
        index = index+1
for i in getSeq(3):
    print('i = '+str(i)+'\n')

输出:

i=1
res = None
i = 2
res = None

上面打印出的res取值都是None,yield将index的值返回给调用方后,res赋的值为None,但是我们也可以从外界手动给res赋值

def getSeq(num):
    index = 1
    while index<num:
        res = yield index
        print('res = '+str(res)+'\n')
        index = index+1
seq = getSeq(5)#
next(seq)
seq.send(1)
seq.send(2)
seq.send(3)

输出:

res=1
res=2
res=3

上述代码先调用next(seq)主要是使getSeq函数暂停到yield语句的地方,暂停在yield语句后才能使用send方法给yield返回值赋值,否则会报错。

上述大概是yield关键词的使用,总结:


扫描下方二维码,及时获取更多互联网求职面经javapython爬虫大数据等技术,和海量资料分享
公众号菜鸟名企梦后台发送“csdn”即可免费领取【csdn】和【百度文库】下载服务;
公众号菜鸟名企梦后台发送“资料”:即可领取5T精品学习资料java面试考点java面经总结,以及几十个java、大数据项目资料很全,你想找的几乎都有

扫码关注,及时获取更多精彩内容。(博主今日头条大数据工程师)
上一篇下一篇

猜你喜欢

热点阅读