Python學習筆記__3.4章 產生器

來源:互聯網
上載者:User

標籤:程式設計語言   Python   

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

列表元素按照某種演算法推算出來,在迴圈的過程中不斷推算出後續的元素。這種一邊迴圈一邊計算的機制,稱為產生器:generator

1.1、建立 generator

1)方法一

只要把一個列表產生式的[]改成(),就建立了一個generator

L = [x * x for x in range(10)]  #  這是列表產生式

g = (x * x for x in range(10)) #  這是generator

>>> g

<generator object <genexpr> at 0x1022ef630>

generator的值不能直接列印,需要用 next()函數獲得,或者通過for迴圈列印

  • next(g)

每調用一次,返回一個generator的值,當所有值返回完畢後,再調用會報錯StopIteration

  • for 迴圈

>>> for n in g:

...     print(n)

2)方法二

在函數體中,有 yield。當然,generator的函數,也可以用 next() 或者 for 迴圈擷取傳回值

函數是順序執行,遇到return語句或者最後一行函數語句就返回

generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行

def odd():

    print('step 1')

    yield 1

    print('step 2')

    yield(3)

    print('step 3')

    yield(5)

>>> o = odd()

>>> next(o)  # next(odd()) 調用效果一樣。for迴圈調用見例題

step 1

1

>>> next(o)

step 2

3

>>> next(o)

step 3

5

 

2、例題

1、編寫一個產生斐波那契數列的 generator 函數

# 函數編寫

def fib(max):

    n, a, b = 0, 0, 1

    while n < max:

        yield b

        a, b = b, a + b

        n = n + 1

    return 'done'

# for迴圈擷取傳回值,但擷取不到generator 執行完的報錯返回

f=fib(6)  # 定義一個generator對象 f

for n in f:

    print(n)

# 擷取值得同時,擷取generator的報錯返回

g=fib(6)

while True:

    try:

        x=next(g)

        print('g',x)

    except StopIteration as e:  # 捕捉錯誤

        print('Generator return value:',e.value)  # 輸入錯誤的傳回值

        break

2、編寫一個楊輝三角的generator函數

# -*- coding: utf-8 -*- 

 

def triangles(): 

    N=[1] 

    while True: 

        yield N        #generator函數與普通函數的差別:在執行過程中,遇到yield就中斷,下次又繼續執行 

        N.append(0) 

        N=[N[i-1] + N[i] for i in range(len(N))]  #楊輝三角的產生式

 

if __name__ == '__main__':    # 如果是啟動並執行.py檔案,就執行下面的命令。調試用

    n=0 

    for t in triangles(): 

        print(t) 

        n=n+1 

        if n == 10: 

            break  


Python學習筆記__3.4章 產生器

聯繫我們

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