首頁>Club>
7
回覆列表
  • 1 # 芒果先生talk

    生成器本質上也是一個迭代器,屬於特殊的迭代器,自己實現了可迭代協議,與生成器不同的是生成器的實現方式不同,可以透過生成器表示式和生成器函式兩種方式實現,程式碼更簡潔。生成器和迭代器都是惰性可迭代物件,只能遍歷一次,資料取完丟擲Stopiteration異常

  • 2 # 菜菜菜鳥

    在 Python 中一切皆物件,物件的抽象就是類,而物件的集合就是容器。python中列表、組、字典、集合都是容器。python中所有的容器都是可以迭代的,這點和列舉有著本質區別。

    迭代器就是用於迭代操作的物件,它像列表一樣可以迭代獲取其中的每一個。它與我們平時使用for迴圈遍歷列表中所有元素的區別在於,構建迭代器的時候,不像列表把所有元素一次性載入到記憶體,而是以一種延遲計算方式返回元素,這就是我們前面所說,為什麼可以極大的減小記憶體的佔用。它是等到呼叫next方法時候才返回該元素(本質上 for 迴圈就是不斷地呼叫迭代器的next方法)。

    Python使用生成器對延遲操作提供了支援。所謂延遲操作,是指在需要的時候才產生結果,而不是立即產生結果。這也是生成器的主要好處。生成器則是提供了一種延遲操作,其不用return返回結果,而是使用。生成器函式就是常規函式的定義,但是,使用語句而不是return語句返回結果。語句一次返回一個結果,在每個結果中間,掛起函式的狀態,以便下次重它離開的地方繼續執行。

    我們寫python程式碼使用的for in 語句就是將上述迭代過程隱式化 ,生成器是特殊和高階的迭代器,並不會像迭代器一樣佔用大量記憶體,只有在被使用的時候才會呼叫產生相應的物件,可以降低記憶體佔用、最佳化程式結構、提高程式速度。

  • 3 # 20200921文

    迭代器和生成器的區別就是對於機器的識別方面的功能的區別,我是這麼理解的,任何產品都有機器識別功能,區別吸氣識別功能是這方面產品的代名詞

  • 中秋節和大豐收的關聯?
  • 這次抗壓吧背鍋吧連同iglol吧被封又是因為什麼?