1. 程式人生 > 其它 >4.3使用生成器建立新的迭代模式

4.3使用生成器建立新的迭代模式

問題:

​ 你想實現一個自定義迭代模式,跟普通的內建函式比如range(),reverse的()不一樣。

解決方案:

​ 如果你想實現一種新的迭代模式,使用一個生成函式來定義它。下面是 一個生產某個範圍內浮點數的生成器。

def frange(start, stop, increment):
    x = start
    while x < stop:
        yield x
        x += increment


for n in  frange(1, 10, 3):
    print(n)
print(list(frange(1, 10, 3)))#->[1, 4, 7]

討論:

​ 一個函式中需要有一個yeild語句即可將其轉換為一個生成器。跟普通函式不同的是,生成器只能用於迭代操作。下面是一個實驗,向你展示這樣的函式底層工作機制。

def countdown(n):
    print('Staring to count from', n)
    while n > 0:
        yield n
        n-=1
    print('Done!')

c=countdown(3)
print(c)
print(next(c))# ->3
print(next(c))# ->2
print(next(c))# ->1
print(next(c))
'''
line 25, in <module>
StopIteration

'''

​ 一個生成器函式主要特徵是它只會迴應在迭代中使用到的next操作,一旦生成器函式返回退出,迭代終止,我們在迭代中通常使用的for語句會自動處理這些細節,所以你無需擔心。