Python數據讀取之生成器(generator)

2021-01-11 從零開始圖像處理

Python生成器是創建迭代器的簡單方法。

簡單來說,生成器是一個函數,它返回一個我們可以迭代的對象(迭代器),迭代器一次返回一個值

較使用列表將所有數據都加載到內存中,生成器節省了大量內存空間。

深度學習的數據讀取部分一般都需要使用迭代器。

創建生成器

生成器有兩種創建方式:

列表生成式的 [] 改成 ()

使用yield方法

1 列表生成式的 [] 改成 ()

把列表生成式中的 [] 改成 () 就創建了一個generator

>>> L = [x * x for x in range(10)]

>>> L[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x * x for x in range(10))

>>> g<generator object <genexpr> at 0x1022ef630>

創建L和g的區別僅在於最外層的 [] 和 () ,L是一個list,而g是一個generator。

2 使用yield方法

生成器解釋:

1,yield:用於返回數據,程序執行到 yield 後,返回結果,記住當前狀態,暫停執行,下次調用時,根據上次的狀態,返回下一個結果,記住新的狀態,暫停執行,……

簡單來說,就是調用一次,吐出 1 個數據,再調用一次,吐出第 2 個數據,再調用一次,吐出第 3 個 ……,在模型訓練時,每個批次的數據,就是通過 yield 吐出來的;

2,生成器可以通過 next 函數調用來一一吐出數據,也可以調用自身的__next__函數;

3,生成器是一種特殊的迭代器,可以通過 for 循環來遍歷其中的數據;

# 定義生成器函數def my_gen():--my_list = ['I', 'love', 'python', 123]--for item in my_list:----yield item# 獲取生成器gen1 = my_gen()# 獲取生成器中的數據print(gen1.__next__()) # Iprint(next(gen1)) # love# 定義生成器,並遍歷其數據gen2 = my_gen()for item in gen2:--print(item)

3 函數內部定義生成器

外部定義一個函數,內部定義一個生成器函數,外部函數返回這個生成器函數的名稱

def outer_fn(num=10):--def inner_gen(para=num):----for item in range(para + 1):-yield item ** 2----return inner_geninner_fn = outer_fn(5) # 外部函數執行,返回內部函數gen = inner_fn() # 內部函數執行,返回生成器print(next(gen)) # 0print(next(gen))#1

相關焦點

  • python安全開發軍規之四:使用安全的隨機數生成器
    QA有話說隨機模塊提供的隨機生成器是偽隨機數生成器。所謂偽隨機數,是通過固定的算法生成的,其結果是確定的,可預見的。一般情況下,偽隨機數的生成需要一個種子,如果沒有特別設置,種子就是系統的時鐘。簡而言之,由於偽隨機數算法固定,種子固定,那結果就是可推導和模擬的。
  • Python生成器函數概述:運用實例分解說明機制
    全文共5930字,預計學習時長12分鐘Python的生成器函數為數據和計算資源管理提供了強大的機制,但對於Python初學者而言,理解它們並非易事。這篇文章會分解生成器的機制,同時介紹一個管理和分類S3文件資源的小類的例子,希望能對你有所啟發。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • Python最重要的5大功能,要是能早點了解就好了!
    但功能雖多,總有主次之分。為了方便大家早點了解Python的一些大功能,小芯特別整理出了其中5大最重要的功能。1. 生成器——內存效率打算計算大量的結果,但同時又想避免同時分配所有結果所需內存,這時候會使用生成器。換句話說,它們即時生成值,但不會將先前生成的值存儲在內存中,因此只需要將其迭代一次。
  • Python 拓展之推導式
    推導式是從一個或多個迭代器快速簡潔的創建數據結構的一種辦法,它可以將循環和條件判斷結合,從而可以避免語法冗長的代碼。列表推導式我在之前的文章中(零基礎學習 Python 之 for 循環語句)寫過列表推導式,但是寫的相對簡單,今天我準備再詳細說一下,會的權當複習,不會的正好學習。
  • Python多階段框架實現虛擬試衣間,超逼真
    在標準數據集上進行的大量實驗表明,他們提出的框架實現了最先進的性能,特別是在保存服裝紋理和面部識別的視覺細節方面。故今天我們將在他們代碼的基礎上,實現虛擬換衣系統。具體流程如下:實驗前的準備首先我們使用的python版本是3.6.5所用到的模塊如下:opencv是將用來進行圖像處理和圖片保存讀取等操作。numpy模塊用來處理矩陣數據的運算。
  • Python每日3題-為什麼函數名字可以當做參數用?
    [Hard] 生成器,迭代器的區別? 思考30秒再往下翻...另一個方法則是創建一個另一種形式的迭代器 —— generator 。要獲取下一個元素,則使用成員函數 next()(Python 2)或函數 next() function (Python 3) 。當沒有元素時,則引發 StopIteration 此例外。
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    【每天幾分鐘,從零入門python編程的世界!】numpy的基本的東西我們學習差不多了,後面具體應用中遇到問題具體分析,然後去深入了解遇到的新的知識點就行。現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。
  • python迭代器和生成器總結——新的斐波那契數列
    python迭代器題目:給定一個序列,循環輸出序列中的每個元素。通過一個for循環就可以實現,如下:for循環遍歷迭代器python迭代器的意義有同學可能會有疑問:既然通過for循環就可以遍歷一個序列,為什麼又要來一個迭代器呢?
  • Python讀取ini配置文件
    python看過我之前文章的同學可能知道,最近一直在做百度語音合成的功能,進一步的延伸功能,此次是批量生成文章的語音文件。目前是使用python來實現的,將代碼打包成了exe文件,方便客戶進行測試。格式如下:;注釋說明此文件應用場景[DATABASE]host = 127port = 3306[TYPE]cat = 0我們簡單的寫兩個配置參數信息,下面來看一下如何讀取信息。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    22機器學習 23深度學習 24數據結構和算法 25python網絡爬蟲 26機器學習入門篇 27機器學習入門篇2 28機器學習提升篇 29數據挖掘篇 30深度學習必備原理與實戰 31深度學習必備原理與實戰2 32深度學習必備原理與實戰3
  • 應用BioPython解析和可視化蛋白質的結構
    使用conda工具進行安裝:conda config --add channels conda-forgeconda install nglview -c biocondajupyter-nbextension enable nglview --py --sys-prefix蛋白質數據的獲得我們可以通過蛋白質資料庫
  • 使用樹莓派(Raspberry Pi)的真正隨機數生成器
    使用電視上的靜態信號將Raspberry Pi變成了真正的隨機數生成器。在國外,我們不再接收模擬地面廣播,因此在電視上查找靜態信號就像將其放在模擬頻道上一樣簡單。 我使用的設置是插入Raspberry Pi的eSecure USB 8MP網絡攝像頭,我將其指向電視。
  • python海量數據快速查詢的技巧
    對於小文件而言,這樣的操作編碼簡單,運行速度也比較滿意,但是對於大型資料庫而言,將資料庫存為字典這個動作是非常耗費時間的,而且每次運行代碼都要執行這樣的操作,導致效率大大降低。想要改善這一狀況,有以下兩種解決辦法1.
  • 理解yield和生成器
    要理解什麼是yield,必須理解什麼是生成器(generator)。在理解生成器之前,讓我們先了解迭代。生成器生成器是一種只能迭代一次的迭代器,生成器不會一次將所有的元素存入內存中,而是一邊迭代一邊運算:這份代碼看起來和上面的代碼沒有什麼區別。
  • 用Python 可以實現側臉轉正臉?我也要試一下
    GAN 由兩個神經網絡組成,一個生成器和一個判別器組成,其中生成器試圖產生欺騙判別器的真實樣本,而判別器試圖區分真實樣本和生成樣本。這種對抗博弈下使得生成器和判別器不斷提高性能,在達到納什平衡後生成器可以實現以假亂真的輸出。其中GAN 在圖像生成應用最為突出,當然在計算機視覺中還有許多其他應用,如圖像繪畫,圖像標註,物體檢測和語義分割。
  • 第66p,概念:生成器、迭代器與迭代對象(下)
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第X篇文章,第三階段的課程:Python進階知識:生成器、迭代器與迭代對象(下)。一、生成器1、什麼是生成器?自定義器迭代器就是生成器(generator);生成器就是迭代器;2、如何得到自定義的迭代器:在函數內存在yield關鍵字,調用函數時並不會執行函數體代碼;而是返回一個生成器對象(generator),這個生成器就是自定義的迭代器;3、生成器的執行過程A.
  • 用Python 訓練自己的語音識別系統,這波操作穩了
    同時考慮到目前大多數的語音識別平臺都是藉助於智能雲,對於語音識別的訓練對於大多數人而言還較為神秘,故今天我們將利用python搭建自己的語音識別系統。最終模型的識別效果如下:實驗前的準備首先我們使用的python版本是3.6.5所用到的庫有cv2庫用來圖像處理;Numpy庫用來矩陣運算;Keras框架用來訓練和加載模型。
  • 解決Python讀取文件時出現UnicodeDecodeError
    今天學習python時,讀取一個txt文檔,然後打開後輸出文件,提示UnicodeDecodeError: 'gbk' codec can't decode bytepython代碼def print_file(fname): f = open(fname,'r'