久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python|yield的解析及用法

 算法與編程之美 2020-08-08

1 什么是yield函數(shù)?

Pythonyield函數(shù)是一個生成器(generator),可用于迭代,;在函數(shù)中yield類似于return,,不同的是,yield返回一個return的值并且記住這個返回值的位置,,下次迭代就從記住的這個位置開始,,并且下一次迭代時,從上一次迭代遇到的yield后面的代碼開始執(zhí)行,。

2 yield函數(shù)的特點及用法,。

yield函數(shù)的優(yōu)點在于它可迭代,但又不直接生成返回值,,如果采用return來返回值,,就會直接生成返回值;如果返回的值,,或者迭代的數(shù)據(jù)太大,,都會使得內(nèi)存消耗過大;yield函數(shù)就會很好的減少內(nèi)存的消耗,,但是它只可讀取一次,。帶有yield的函數(shù)不僅僅可以用于for循環(huán),還可以用于函數(shù)的參數(shù),,例如:

#用于for循環(huán)

def yields(n):

    print('yield用法:')

    while n<10:

        n+=1

        yield n

    return 'pass'

c=yields(0)

print(next(c))

print(next(c))

print(next(c))

輸出:

1

2

3

#用于函數(shù)的參數(shù)

def a():

    print('aaa')

    p = yield '123'

    print('bbb')

    k = yield '234'

r = a()

print(next(r))

輸出:

aaa

123

思考一下如果將用于函數(shù)參數(shù)的yield再增加一個輸出next()會發(fā)生什么情況呢,?

def a():

    print('aaa')

    p = yield '123'

    print('bbb')

    k = yield '234'

r = a()

print(next(r))

print(next(r))

輸出:

aaa

123

bbb

234

由以上代碼以及運行結(jié)果不難發(fā)現(xiàn),每一個next返回值,,都會在執(zhí)行到yield函數(shù)后暫停生成,,下一次next返回值則會繼續(xù)從上一個暫停的位置執(zhí)行,這也是yield函數(shù)的特點與用法,。

3 send()與next()用法的異同,。

next()函數(shù)可以不斷打印yield生成器的值;

send()函數(shù)特別之處在于它可以攜帶參數(shù),,并修改上一個表達式的值,,同時用法也與next()有很多相同之處,;

3.1相同點

相同點在于,當send()所攜帶的參數(shù)為None(即未攜帶任何參數(shù))時,,用法與next()一模一樣,,都僅僅是來打印yield生成器的值。

3.2 不同點

不同點在于當send()所攜帶的參數(shù)時,,就會將所帶參數(shù)賦值給上一個表達式,;實例:

def a():

    print('send():')

    i = yield 123

    print(i)

    if i==234:

        print("send傳入的參數(shù)為234")

    k = yield 345

    print(k)

r=a()

next(r)

r.send(234)

輸出:

send():

234

Send傳入的參數(shù)為234

分析:首先執(zhí)行next(r),當?shù)谝淮斡鲆?/span>yield跳出輸出send():,;然后執(zhí)行r.send(234),,send()直接將234參數(shù)傳給i中并從yield位置繼續(xù)執(zhí)行,輸出i,,值為234,,然后輸出if條件語句,當執(zhí)行到下一個yield時,,也就是k=yield 345時,,跳出。

注意:yield的第一次執(zhí)行一定為next(r)或者r.send(None),。

4 總結(jié)

該文從介紹yield函數(shù)入手,,主要為大家講述了yield函數(shù)的用法及其特點,利用實例區(qū)分了next()send()在打印生成器方法的異同,,有助于大家更快的掌握yield函數(shù)的用法,。


END

主  編   |   王文星

責  編   |   王卓越

 where2go 團隊


微信號:算法與編程之美          

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多