Learn Python—函數(迭代器、產生器)

來源:互聯網
上載者:User

標籤:==   turn   擷取值   bre   迭代器   color   就是   ble   結果   

迭代器iterator
  • 可迭代協議—只要含有__iter__方法的,都是可迭代的iterable
  • 迭代器協議—內部含有__next__方法和__iter__方法的就是迭代器
  1. 只要能被for迴圈的資料類型,就一定擁有__iter__方法,for迴圈其實就是在使用迭代器
  2. 只要是迭代器就一定可以迭代
  3. 可迭代對象.__iter__() == 迭代器
  4. 迭代器中的__next__()方法可以一個一個的擷取值

迭代器對象可以使用常規for語句進行遍曆:

list=[1,2,3,4]it = iter(list)    # 建立迭代器對象for x in it:    print (x, end=" ")

執行以上程式,輸出結果如下:

1 2 3 4
迭代器的好處
  • 從容器類型中一個一個的取值,會把所有的值都取到
  • 節省記憶體空間
產生器

產生器函數本質上就是我們自己寫的函數

跟普通函數不同的是,產生器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解產生器就是一個迭代器。

在調用產生器啟動並執行過程中,每次遇到 yield 時函數會暫停並儲存當前所有的運行資訊,返回yield的值。並在下一次執行 next()方法時從當前位置繼續運行。

yield關鍵字

yield關鍵字和return用法相同,只要含有yield關鍵字的函數,都是產生器函數,yield需要寫在函數內部,不可以和return同時使用,產生器函數執行後會得到一個產生器作為傳回值

def generator():    print(1)    yield ‘a‘#產生器函數 : 執行之後會得到一個產生器作為傳回值ret = generator()print(ret)print(ret.__next__())
#娃哈哈%idef wahaha():    for i in range(2000000):        yield ‘娃哈哈%s‘%icount = 0for i in g:    count +=1    print(i)    if count > 50:        breakfor i in g:    count +=1    print(i)    if count > 100:        break

 

Learn Python—函數(迭代器、產生器)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.