python 3.x 學習筆記5 ( 迭代器 and 產生器 ),python3.x

來源:互聯網
上載者:User

python 3.x 學習筆記5 ( 迭代器 and 產生器 ),python3.x

1.迭代器(Iterator):
  可以被next()函數調用並不斷返回下一個值的對象,成為迭代器:Iterator
  可以直接用於for 迴圈的對象統稱為可迭代對象:Iterable

  迭代,顧名思義就是重複做一些事很多次(就現在迴圈中做的那樣)。迭代器是實現了__next__()方法的對象(這個方法在調用時不需要任何參數),它是訪問可迭代序列的一種方式,通常其從序列的第一個元素開始訪問,直到所有的元素都被訪問才結束。但是迭代器只能前進不能後退

優點:
  使用迭代器不要求事先準備好整個迭代過程中的所有元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後元素可以不存在或者被銷毀。因此迭代器適合遍曆一些數量巨大甚至無限的序列。

2.產生器:
  只有調用時才會產生相應的資料,且只有一個__next__()方法

  如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在Python中,這種一邊迴圈一邊計算的機制,稱為產生器(Generator)。

建立方法:
  1)最簡單的是把一個列表產生式的[]改成(),就建立了一個generator

  2)可以把函數變成generator object,只需要把print()改為yield 即可。


3.

yeild 作用:儲存目前狀態並返回
send()作用:喚醒並傳遞一個值
__next__()作用:只是喚醒


4.

 產生器都是Iterator對象,但是list、低產田、str雖然是Iterable,卻不是Iterator,把list、dict、str等Iterable變成Iterator可以使用iter()函數。

 

5.通過yield將斐波那契函數變成產生器

 

 1 def fib(max): 2     n,a,b = 0,0,1 3     while n < max: 4         yield b          #將函數變成產生器 5         a,b = b,a+b         6         n += 1 7     return 'lalalalal' 8  9 f = fib(10)10 11 while True:12     try13         x = next(f)             #相當於執行一次函數fib()14         print(x)15     except StopIteration as e:16         print('Generator return value is %s '%e.value)   #e的value是函數傳回值如fib函數的傳回值'lalalalal'17         break

 

聯繫我們

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