最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用生成器來改寫直接返回列表的函數(shù)方法

 更新時間:2017年05月25日 09:04:14   投稿:jingxian  
下面小編就為大家?guī)硪黄蒙善鱽砀膶懼苯臃祷亓斜淼暮瘮?shù)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文是一篇關(guān)于《Effective Python》書中一節(jié)的學(xué)習(xí)筆記,記錄了示例代碼和思路。

如果函數(shù)要產(chǎn)生一系列結(jié)果,那么最簡單的做法就是把這些結(jié)果都放在一個列表里返回。

比如我們要查出字符串中每個詞的首字母在整串字符串中的位置:

def index_word(text):
  result=[]
  if text:
    result.append(0)
  for index,letter in enumerate(text):
    if letter == ' ':
      result.append(index+1)
  return result

該函數(shù)的使用:

  

這個函數(shù)思路很明了,但存在的問題在于代碼擁擠、冗余。返回前要把所有結(jié)果都放在列表里,如果輸入量巨大,則程序可能會耗盡內(nèi)存發(fā)生崩潰。

這個函數(shù)改用生成器(generator)來寫會更好??梢詫?yīng)任意長度的數(shù)據(jù),不會影響到執(zhí)行時所耗內(nèi)存。

生成器是使用yield表達(dá)式的函數(shù)。調(diào)用生成器函數(shù)時,它并不會真的運(yùn)行,而是會返回迭代器。每次在這個迭代器上面調(diào)用內(nèi)置的next函數(shù)時,迭代器會把生成器推進(jìn)到下一個yield表達(dá)式那里。生成器傳給yield的每一個值,都會由迭代器返回給調(diào)用者。

def index_word_iter(text):
  if text:
    yield 0
  for index,letter in enumerate(text):
    if letter == ' ':
      yield index+1

需要注意的是:函數(shù)返回的迭代器,只能產(chǎn)生一輪結(jié)果,如果繼續(xù)迭代第二輪,是不會再有結(jié)果的。

以上這篇用生成器來改寫直接返回列表的函數(shù)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

邯郸县| 九江县| 乡宁县| 波密县| 大悟县| 名山县| 清新县| 博客| 普宁市| 赫章县| 剑川县| 佛学| 方正县| 九台市| 大洼县| 轮台县| 壶关县| 乌兰察布市| 上饶县| 濮阳县| 四平市| 阜康市| 乳山市| 泗水县| 肇州县| 固安县| 平定县| 贵南县| 荥经县| 大连市| 陆河县| 隆尧县| 萨嘎县| 大丰市| 察隅县| 铁力市| 涟水县| 津市市| 建水县| 宁国市| 澄江县|