Python 產生器運算式

Han
2 min readMay 1, 2018

--

簡單介紹一下:

Python的產生器(generator)物件,主要是用來解決用串列(lsit)存取資料時,會受到記憶體容量限制的問題。所以當我們使用pymongo等等一些取得外部資料的工具時,會發現回傳的物件其實都是產生器。

產生器與串列有一些相同的地方,但要非常注意使用產生器時,其內部的索引是有狀態的變化。所以如果已經用for迴圈跑到,之後這個產生器就只會回傳最終的狀態,也就是終止例外"StopIteration"。這有可能會影響後續的程式,假如程式之後會繼續用到這個資料的話。

最簡單的產生器運算式如下:

產生器(generator)跟串列(list)都可以用for迴圈(for loop)進行迭代(iterate through)

產生器性質:

  1. 產生器有狀態而串列沒有狀態。
  2. 產生器是藉由next調用後才會取得下一個值。
  3. 當到達尾端時會回傳"StopIteration"例外。
  4. 常與 sum, max, min之類的方法一起使用。

Reference:

  1. https://wiki.python.org/moin/Generators
  2. https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108490cb4c13182e472f8d87830f13be6e88000
  3. http://kissg.me/2016/04/09/python-generator-yield/

--

--

Han
Han

No responses yet