中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Python生成器

發布時間:2021-05-07 16:52:08 來源:億速云 閱讀:134 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關如何使用Python生成器,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

python主要應用領域有哪些

1、云計算,典型應用OpenStack。2、WEB前端開發,眾多大型網站均為Python開發。3.人工智能應用,基于大數據分析和深度學習而發展出來的人工智能本質上已經無法離開python。4、系統運維工程項目,自動化運維的標配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數據分析。

返回隊列的函數

如果函數要產生一系列結果,那么最簡單的做法就是把這些結構都放在一份列表里,然后將其返回給調用者。

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

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

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

打印

[0, 5, 11]

生成器函數

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

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))

注意:生成器函數返回的迭代器是有狀態的,調用者不應該反復使用。

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

為類實現生成器

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

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

多次迭代

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

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

看完上述內容,你們對如何使用Python生成器有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

织金县| 金阳县| 湖口县| 灵山县| 上饶市| 中西区| 浮梁县| 同德县| 栾川县| 屯门区| 象山县| 观塘区| 凌源市| 安阳市| 通山县| 湖南省| 峨眉山市| 梁河县| 呼玛县| 连城县| 望城县| 佛山市| 威海市| 永城市| 巴东县| 乾安县| 彰化市| 平塘县| 通山县| 德安县| 旬阳县| 尤溪县| 唐海县| 桑植县| 乐平市| 布尔津县| 英山县| 红桥区| 巢湖市| 曲松县| 额济纳旗|