Python基礎(12):生成器 & reduce

Ryan_Bai發表於2019-02-28

一、生成器

在 Python 中,使用了 yield 的函式被稱為生成器(generator)。

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

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

import sys
 
def fibonacci(n): # 生成器函式 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
 
while True:
    try:
        print(next(f), end=" ")
    except StopIteration:
        sys.exit()
         
執行以上程式,輸出結果如下:
0 1 1 2 3 5 8 13 21 34 55

二、reduce

python中的reduce內建函式是一個二元操作函式,他用來將一個資料集合(連結串列,元組等)中的所有資料進行下列操作:用傳給reduce中的函式 func()(必須是一個二元操作函式)先對集合中的第1,2個資料進行操作,得到的結果再與第三個資料用func()函式運算,最後得到一個結果。

如:

def myadd(x,y): 
    return x+y 
sum=reduce(myadd,(1,2,3,4,5,6,7)) 
print sum
 
#結果就是輸出1+2+3+4+5+6+7的結果即28
 
當然,也可以用lambda的方法,更為簡單:
 
sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7)) 
print sum

在python 3.0.0.0以後, reduce已經不在built-in function裡了, 要用它就得from functools import reduce.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2637149/,如需轉載,請註明出處,否則將追究法律責任。

相關文章