Python不歸路_產生器

來源:互聯網
上載者:User

標籤:while   開發   系統   var   特殊   style   logs   exp   演算法   

產生器:產生器是一次產生一個值的特殊類型函數。可以將其視為可繼續函式。調用該函數將返回一個可用於產生連續 x 值的產生器【Generator】,產生器具有一邊計算一邊生產生的功能,起到節省空間的作用,真正能做到按需所取。來看下面這段代碼:

[ x**2 for x in range(20) ]
輸出結果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
---------------------------------------------------------------------------------------
A = [x**2 for x in range(20)]
type(A)
輸出結果:
<class ‘list‘>
---------------------------------------------------------------------------------------
B=( x**2 for x in range(20) )
print(B)
輸出結果:
<generator object <genexpr> at 0x0000015C857D7EB8>

我們可以看到A的輸出結果是一個列表,我們試想一下,當列表中元素的數量很多時,會大大佔用系統空間,加重cpu負載。而B的輸出結果是產生器的記憶體空間,但是我們也想要得到A的輸出結果,怎麼辦呢?我們可以使用__next__()來調用元素,每執行一次__next__(),向後調用一個元素。


B=( x**2 for x in range(20) )
print(B.__next__())print(B.__next__())print(B.__next__())print(B.__next__())
輸出結果:
0  # x=0
1  # x=1  
4  # x=2
9  # x=3

 每次調用一個元素,如果元素多了是不是很麻煩?所以__next__基本不會使用,而會使用for迴圈來迭代。generator非常強大,如果推算的演算法比較複雜,用類似列表產生式的for迴圈無法實現的時候,還可以用函數來實現。一般帶有yield關鍵字的函數就被稱為產生器。

來看這段代碼

def func1(x):    while x < 1000:        n = x**2        yield n        x+=1f=func1(200)for i in f:    print(i)

func1(x)函數就是一個產生器,當運行該func1(x),函數成了產生器,並通過yield來調用每一次的值。

總結:

一般帶有yield的函數都是產生器,產生器使用方法__next__()取值,而且一次只能調取一個值,如要調取多個值,可以使用for來迭代取值。產生器可以作到按需取值,減少負載的作用。

 

 

 

  

 -------不會開發的營運不是好廚師

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.