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

Python生成器的使用方法和示例代碼

 更新時間:2019年03月04日 15:32:56   作者:閼男秀  
今天小編就為大家分享一篇關(guān)于Python生成器的使用方法和示例代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

本文是《Effect Python 編寫高質(zhì)量Python代碼的59個有效方法》的學(xué)習(xí)筆記。主要記錄生成器的使用方法和示例代碼。

返回隊列的函數(shù)

如果函數(shù)要產(chǎn)生一系列結(jié)果,那么最簡單的做法就是把這些結(jié)構(gòu)都放在一份列表里,然后將其返回給調(diào)用者。

def index_words(text):
  """用append方法將這些此的首字母索引添加到result列表中,并在函數(shù)結(jié)束時將其返回給調(diào)用者。"""
  result = []
  if text:
    result.append(0)
  for index, letter in enumerate(text):
    if letter == ' ':
      result.append(index+1)
  return result

輸入一些測試值,驗證該函數(shù)能正常運行:

>address = 'Four score and seven years ago...'
result = index_words(address)
print(result[:3])

打印

[0, 5, 11]

生成器函數(shù)

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

def index_words_iter(text):
  if text:
    yield 0
  for index, letter in enumerate(text):
    if letter == ' ':
      yield index + 1
result = list(index_words_iter(address))

注意:生成器函數(shù)返回的迭代器是有狀態(tài)的,調(diào)用者不應(yīng)該反復(fù)使用。

由于迭代器只能產(chǎn)生一輪結(jié)果。在拋出過StopIteration異常的迭代器或生成器上面繼續(xù)迭代第二輪,是不會有結(jié)果的。為解決此問題,我們可以明確地使用該迭代器制作一份列表,將它的全部內(nèi)容都遍歷一次,并賦值到這份列表里,然后就可以在復(fù)制出來的數(shù)據(jù)列表上面多次迭代了。

為類實現(xiàn)生成器

下面是一個可以迭代的容器類,用來從文件中讀取每行數(shù)據(jù)。

class ReadFileLines(object):
  """
  可以迭代的容器類,從文件中獲取數(shù)據(jù)
  """
  def __init__(self, path):
    self.path = path
  def __iter__(self):
    with open(self.path) as f:
      for line in f:
        yield line

多次迭代

如果想多次迭代生成器的數(shù)據(jù),可以使用下面的函數(shù)。該函數(shù)會逐步拷貝生成器的所有數(shù)據(jù),然后返回一個隊列數(shù)據(jù)。

def normalize_defensive(datas):
  """
  從生成器返回一份可以多次迭代的數(shù)據(jù)
  :param datas:容器 
  :return: result:隊列(list)
  """
  # 確保調(diào)用者傳進來的參數(shù),并不是迭代器對象本身
  if iter(datas) is iter(datas):
    raise TypeError('Must supply a container')
  # TODO
  result = []
  for data in datas:
    # TODO
    result.append(data)
  return result

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • numpy最值、求和的實現(xiàn)

    numpy最值、求和的實現(xiàn)

    本文主要介紹了numpy最值、求和的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python實現(xiàn)尋找回文數(shù)字過程解析

    Python實現(xiàn)尋找回文數(shù)字過程解析

    這篇文章主要介紹了Python實現(xiàn)尋找回文數(shù)字過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python入門學(xué)習(xí)之類的相關(guān)知識總結(jié)

    Python入門學(xué)習(xí)之類的相關(guān)知識總結(jié)

    今天帶大家復(fù)習(xí)python的基礎(chǔ)知識,文中對類的相關(guān)知識作了非常詳細的介紹,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 使用jupyter notebook輸出顯示不完全的問題及解決

    使用jupyter notebook輸出顯示不完全的問題及解決

    這篇文章主要介紹了使用jupyter notebook輸出顯示不完全的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python入門教程(十五)Python的字典

    Python入門教程(十五)Python的字典

    這篇文章主要介紹了Python入門教程(十五)Python的字典,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • python3 pillow生成簡單驗證碼圖片的示例

    python3 pillow生成簡單驗證碼圖片的示例

    本篇文章主要介紹了python3 pillow生成簡單驗證碼圖片的示例,非常具有實用價值,需要的朋友可以參考下
    2017-09-09
  • 人工智能——K-Means聚類算法及Python實現(xiàn)

    人工智能——K-Means聚類算法及Python實現(xiàn)

    這篇文章主要介紹了人工智能——K-Means聚類算法及Python實現(xiàn),一個能夠找到我圈出的這?些點集的算法,就被稱為聚類算法,下面就來看看文章具體的介紹吧
    2022-01-01
  • 用python實現(xiàn)一個文件搜索工具

    用python實現(xiàn)一個文件搜索工具

    大家好,本篇文章主要講的是用python實現(xiàn)一個搜索工具,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 小白如何入門Python? 制作一個網(wǎng)站為例

    小白如何入門Python? 制作一個網(wǎng)站為例

    以制作一個網(wǎng)站為例,聊一聊小白如何入門Python,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python中如何將一個類方法變?yōu)槎鄠€方法

    Python中如何將一個類方法變?yōu)槎鄠€方法

    這篇文章主要介紹了Python中如何將一個類方法變?yōu)槎鄠€方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論

武冈市| 新竹县| 承德县| 开化县| 大方县| 磐安县| 会宁县| 华宁县| 若羌县| 崇左市| 上饶县| 同江市| 永兴县| 广南县| 枣强县| 万安县| 临高县| 竹溪县| 石狮市| 牟定县| 双桥区| 北海市| 禹州市| 汽车| 德钦县| 萍乡市| 长治县| 施秉县| 天气| 电白县| 会东县| 琼结县| 东莞市| 宁德市| 鲁山县| 古丈县| 临汾市| 景宁| 沧源| 洛南县| 息烽县|