1. 程式人生 > >Python生成器和列表生成式

Python生成器和列表生成式

生成器:
在Python中, 這種一邊迴圈一邊計算的機制, 稱為生成器:generator
列表生成式:L(list) = [x * x for x in range(10)]
生成器:    g(generator) = (x * x for x in range(10))

呼叫該generator時, 首先要生成一個generator物件, 然後用 next() 函式不斷獲得下一個返回值

斐波拉契數列函式:

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a , b = b, a + b
        n = n + 1
    return 'done' 
斐波拉契數列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'
就是定
generator 一種方法。 如果一個函式定 中包含 yield 字, 那麼 個函式就不再是一個普通函式, 而是一個 generator

裡, 最理解的就是generator和函式的行流程不一。 函式是行, 遇到 return 句或者最後一行函式句就返回。 而generator的函式, 在每次調next() 行, 遇到 yield 句返回, 再次從上次返回的 yield 處繼續執行。

楊輝三角函式:

def triangles():
    n = 1
    N = [1]
    while True:
        print(N)
        N.append(0)
        N = [N[i-1] + N[i] for i in range(len(N))]
        n = n + 1
        if n >10:
            break

結果:

>>>>triangles()
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

楊輝三角generator函式:

def triangles():  
 p = [1]  
    while True:  
        yield p  
        p = [1] + [p[i] + p[i+1] for i in range(len(p)-1)] + [1]