解析Python中的產生器及其與迭代器的差異,python產生器

來源:互聯網
上載者:User

解析Python中的產生器及其與迭代器的差異,python產生器

產生器
產生器是一種迭代器,是一種特殊的函數,使用yield操作將函數構造成迭代器。普通的函數有一個入口,有一個傳回值;當函數被調用時,從入口開始執行,結束時返回相應的傳回值。產生器定義的函數,有多個入口和多個傳回值;對產生器執行next()操作,進行產生器的入口開始執行代碼,yield操作向調用者返回一個值,並將函數掛起;掛起時,函數執行的環境和參數被儲存下來;對產生器執行另一個next()操作時,參數從掛起狀態被重新調用,進入上次掛起的執行環境繼續下面的操作,到下一個yield操作時重複上面的過程。Python的迴圈操作與C語言的實現不同,如果使用List等資料結構需要耗費大量的內容;迴圈操作中使用產生器只需要在記憶體中執行個體化一個對象,可以減少記憶體佔用,提高迴圈操作的執行速度。

>>>def myG():...  yield 1...  yield 2...  yield 3...>>>g=myG()>>>next(g)1>>>next(g)2>>>next(g)3>>>next(g)Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration>>>g2=myG()>>>for i in g2:...  print(i)123

產生器運算式
for...[if]...語句可以簡潔的構建一個List,同時也可以用來構建產生器。

>>>a=[7,8,9]>>>b=[i**2 for i in a]>>>b[49, 64, 81]>>>ib=(i**2 for i in a)>>>ib<generator object <genexpr> at 0x7f72291217e0>>>>next(ib)49>>>next(ib)64>>>next(ib)81>>>next(ib)Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration

迭代器(Iterator)與產生器(Generator)的區別
迭代器是一個更抽象的概念,任何對象,如果它的類有next方法(next python3)和iter方法返回自己本身。

每個產生器都是一個迭代器,但是反過來不行。通常產生器是通過調用一個或多個yield運算式構成的函數s產生的。同時滿足迭代器的定義。

當你需要一個類除了有產生器的特性之外還要有一些自訂的方法時,可以使用自訂的迭代器,一般來說產生器更方便,更簡單。

def squares(start, stop):  for i in xrange(start, stop):    yield i*i

等同於產生器運算式:

(i*i for i in xrange(start, stop))

列表推倒式是:

[i*i for i in xrange(start, stop)]

如果是構建一個自訂的迭代器:

class Squares(object):  def __init__(self, start, stop):    self.start = start    self.stop = stop  def __iter__(self):    return self  def next(self):    if self.start >= self.stop:      raise StopIteration    current = self.start * self.start    self.start += 1    return current

此時,你還可以定義自己的方法如:

def current(self):  return self.start

兩者的相同點:對象迭代完後就不能重寫迭代了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.