欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

返回隊(duì)列的函數(shù)

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

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

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

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

打印

[0, 5, 11]

生成器函數(shù)

這個(gè)函數(shù)改用生成器(generator)來寫會(huì)更好。生成器是使用yield表達(dá)式的函數(shù)。調(diào)用生成器函數(shù)時(shí),它并不會(huì)真的運(yùn)行,而是會(huì)返回迭代器。每次在這個(gè)迭代器上面調(diào)用內(nèi)置的next函數(shù)時(shí),迭代器會(huì)把生成器推進(jìn)到下一個(gè)yield表達(dá)式那里。生成器傳給yield的每一個(gè)值,都會(huì)由迭代器返回給調(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ù)迭代第二輪,是不會(huì)有結(jié)果的。為解決此問題,我們可以明確地使用該迭代器制作一份列表,將它的全部內(nèi)容都遍歷一次,并賦值到這份列表里,然后就可以在復(fù)制出來的數(shù)據(jù)列表上面多次迭代了。

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

下面是一個(gè)可以迭代的容器類,用來從文件中讀取每行數(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ù)會(huì)逐步拷貝生成器的所有數(shù)據(jù),然后返回一個(gè)隊(duì)列數(shù)據(jù)。

def normalize_defensive(datas):
  """
  從生成器返回一份可以多次迭代的數(shù)據(jù)
  :param datas:容器 
  :return: result:隊(duì)列(list)
  """
  # 確保調(diào)用者傳進(jìn)來的參數(shù),并不是迭代器對(duì)象本身
  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)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Python動(dòng)態(tài)導(dǎo)入模塊的方法實(shí)例分析

    Python動(dòng)態(tài)導(dǎo)入模塊的方法實(shí)例分析

    這篇文章主要介紹了Python動(dòng)態(tài)導(dǎo)入模塊的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python動(dòng)態(tài)導(dǎo)入系統(tǒng)模塊、自定義模塊以及模塊列表的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • python實(shí)點(diǎn)云分割k-means(sklearn)詳解

    python實(shí)點(diǎn)云分割k-means(sklearn)詳解

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)點(diǎn)云分割k-means,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • JavaScript實(shí)現(xiàn)一維數(shù)組轉(zhuǎn)化為二維數(shù)組

    JavaScript實(shí)現(xiàn)一維數(shù)組轉(zhuǎn)化為二維數(shù)組

    下面小編就為大家分享一篇JavaScript實(shí)現(xiàn)一維數(shù)組轉(zhuǎn)化為二維數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 深入理解Python虛擬機(jī)中列表(list)的實(shí)現(xiàn)原理及源碼剖析

    深入理解Python虛擬機(jī)中列表(list)的實(shí)現(xiàn)原理及源碼剖析

    在本篇文章當(dāng)中主要給大家介紹?cpython?虛擬機(jī)當(dāng)中針對(duì)列表的實(shí)現(xiàn),在?Python?中,List?是一種非常常用的數(shù)據(jù)類型,可以存儲(chǔ)任何類型的數(shù)據(jù),并且支持各種操作,如添加、刪除、查找、切片等,在本篇文章當(dāng)中將深入去分析這一點(diǎn)是如何實(shí)現(xiàn)的
    2023-03-03
  • python中實(shí)現(xiàn)棧的三種方法

    python中實(shí)現(xiàn)棧的三種方法

    這篇文章主要介紹了python中實(shí)現(xiàn)棧的三種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 使用Bazel編譯TensorBoard教程

    使用Bazel編譯TensorBoard教程

    今天小編就為大家分享一篇使用Bazel編譯TensorBoard教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 數(shù)據(jù)可視化Pyecharts的實(shí)際使用方式

    數(shù)據(jù)可視化Pyecharts的實(shí)際使用方式

    這篇文章主要介紹了數(shù)據(jù)可視化Pyecharts的實(shí)際使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • python從Oracle讀取數(shù)據(jù)生成圖表

    python從Oracle讀取數(shù)據(jù)生成圖表

    這篇文章主要介紹了python如何從Oracle讀取數(shù)據(jù)生成圖表,幫助大家更好的利用python處理數(shù)據(jù),感興趣的朋友可以了解下
    2020-10-10
  • Python實(shí)現(xiàn)爬取騰訊招聘網(wǎng)崗位信息

    Python實(shí)現(xiàn)爬取騰訊招聘網(wǎng)崗位信息

    這篇文章主要介紹了如何用python爬取騰訊招聘網(wǎng)崗位信息保存到表格,并做成簡單可視化。文中的示例代碼對(duì)學(xué)習(xí)Python有一定的幫助,感興趣的可以了解一下
    2022-01-01
  • python?服務(wù)器批處理得到PSSM矩陣的問題

    python?服務(wù)器批處理得到PSSM矩陣的問題

    這篇文章主要介紹了python?服務(wù)器批處理得到PSSM矩陣,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評(píng)論